我有两个表:
第一个表(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_no 605 不存在。搜索仍然工作正常,但数组键不再正确,即 $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));
关于php - 通过 PHP/MySQL 联合表搜索获取正确的数组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34043061/