2015-12-02 17 views
0

右陣列鍵(S)我有兩個表:獲取與PHP/MySQL的搜索聯合表

1表(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']; 
} 

,但它似乎並沒有工作。

我在做什麼錯?有一個更好的方法嗎?任何幫助非常感謝!

回答

0

很奇怪,我有一個可變數量的根據查詢結果變量...但你可以嘗試這樣的事情:

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

而對於最後一個項目:

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

感謝您的建議@jolmos。我應該澄清一下,根據搜索中使用的id,沒有,結果中可能會丟失一行或多行,這意味着其他項目,而不僅僅是最後一項,可能會受到影響。你會如何爲這種情況編寫解決方案? – Cucurigu

+0

我不明白你的意思... 隨着我寫的代碼,你將最終有一個像$ item_n0 = value,$ item_n1 = value(無論原始數組或查詢結果大小)的變量集。 ..然後$ lastItem = value,對應於原始數組/查詢結果中的最後一個值。 – jolmos

+0

再次感謝您的評論。 – Cucurigu