使用PHP/MMySQL搜索联合表来获得正确的数组键


Get right array key(s) with PHP/MySQL search of joint tables

我有两个表:

第一个表格(t1):

item_no | item_desc
-------------
200  | d1  
250  | d2 
257  | d3 
305  | d4  
605  | d5
606  | d6 

第二张表(t2)

id | item_no | item_value
-------------
1 | 200  | v1_200  
1 | 250  | v1_250 
1 | 257  | v1_257 
1 | 305  | v1_305
1 | 605  | v1_605  
1 | 606  | v1_606
2 | 200  | v2_200  
2 | 250  | v2_250 
2 | 257  | v2_257 
2 | 305  | v2_305  
2 | 606  | v2_606

我通过$id=$_POST['id']获得t2中id字段的值;并对其进行安全检查等。

我用这样的查询对两个表执行联接搜索:

$items= array();
$items_no = array('200', '250', '257', '305', '605', '606');
$items_nos = implode(",", $nutrient_no);
$sql = "SELECT item_value FROM t1 join t2 ON  t1.item_no=t2.item_no WHERE t1.id='$id' AND t2.item_no in ($items_nos)"; 

最后,我提取如下结果:

$retval = mysql_query($sql) or die('Query failed: ' . mysql_error());
while($row = mysql_fetch_assoc($retval))
{
$item_value[] = $row['item_value'];
$first_item = $item_value['0'];
$second_item = $item_value['1'];
....
$last_item = $item_value['5'];    
}

问题是,对于id#2上的搜索,如我上面给出的示例所示,item_no605不存在。搜索仍然很好,但数组键不再正确,即$last_item的值没有正确返回,因为键现在是4而不是5。

重要提示:根据搜索中使用的id,结果中可能没有、一行或多行丢失。

我尝试过这个解决方案:

$items_count = count($item_value);
for( $x = 1; $x <= $items_count ; $x++ ) {
$foo = 'item_value' . $x;
if ( isset( $$item_value[$x-1])) {
    $$foo = $$item_value[$x-1];
}
else {
    $$foo = '';
}
$last_item = $foo['5']; 
}

但它似乎不起作用。

我做错了什么?有更好的方法吗?非常感谢您的帮助!

对我来说,根据查询结果有可变数量的变量是很奇怪的。。。但你可以试试这样的东西:

for ($i=0; $i < count($arr)-1; $i++) { 
    ${"item_n" . $i} = $arr[$i];
}

最后一项:

$last_item = end(array_values($arr));