php - 通过 PHP/MySQL 联合表搜索获取正确的数组键

标签 php mysql dynamic-arrays

我有两个表:

第一个表(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/

相关文章:

php - 按年份获取记录

php - 使用 PHP/MySQL 替换表中的多个字符串

c++ - 如何正确使用动态数组?

c - glib如何地址到索引g_ptr_array

php - 将对象转换为关联数组返回空值

php - 用于计算每天订单总数的 SQL 查询?

javascript - 将 php 关联数组转换为字符串时遇到问题

MySQL - count and group by - 在一行中显示所有结果

javascript - 创建嵌套的 Javascript 对象

php - 获取当前网址