2011-06-16 28 views
0

下面的代碼只輸出單行(數據庫中有2個應該輸出)。WHERE id =(array)

我認爲,問題出在ID = $數據[ID]因爲DATA1是數組,而不是單一的value.I希望會解決這個問題,但它does not看起來不太好......

$results1 = mysql_query("SELECT * FROM keywords WHERE keyword='$search' ORDER BY (relevant-irrelevant) DESC"); 
    $data1=mysql_fetch_array($results1); 
    $results2=mysql_query("SELECT * FROM searchengine WHERE id='$data1[id]'"); 
    while($data2=mysql_fetch_array($results2)) 
+3

要小心......你可能用sql注入... – THEn 2011-06-16 22:51:09

回答

5

首先,分離你的ID,循環獲取所有的結果:

$ids = array(); 

while ($data1 = mysql_fetch_array($results1)) { 
    $ids[] = $data1['id']; 
} 

然後,你的$ ids數組轉換爲字符串。一個簡單的方法做,這是通過implode()

$results2=mysql_query(
    "SELECT * FROM searchengine WHERE id IN (" . implode(',', $ids) . ")" 
    ); 
+0

'$ data1'是一個數組,'$ data1 [id]'是一個單一值; 「關鍵字」表中字段「id」的值。 – jeroen 2011-06-16 23:02:19

+0

@ jeroen:很好。我從最初的帖子不明白這一點。答案已更新。 – 2011-06-16 23:10:24

+0

+1這看起來像OP一定在尋找什麼。 – jeroen 2011-06-16 23:12:14

1

難道你不能只選擇一個查詢中的整個事情嗎?

SELECT * 
FROM keywords k 
    searchengine s 
WHERE k.keyword='$search' 
AND k.id = s.id 
1
$results1 = mysql_query("SELECT * FROM keywords WHERE keyword='$search' ORDER BY (relevant-irrelevant) DESC"); 
    $data1=mysql_fetch_array($results1); 
//VERY DANGEROUS TO USE USER INPUT 
$in = join(',',$data1['id']); 
    $results2=mysql_query("SELECT * FROM searchengine WHERE id IN ({$in})"); 
    while($data2=mysql_fetch_array($results2)) 
0

你不能傳遞數組作爲條件。您應該:

a。爲$ data1數組中的(每個)循環執行一次並執行下一個操作

b。破壞陣列並使用IN進行搜索。例如:

$commaSeparated = implode(",", $data1);

$results2=mysql_query('SELECT * FROM searchengine WHERE id IN ('.$commaSeparated.'));

0

mads.ohm是關於兩個查詢組合成一個單一的查詢正確。

至於你的問題只有一個返回值,你的while循環只是每次都覆蓋$ data2的內容。

你可以寫這樣的事情,而不是:

$i = 0; 
$data2 = array(); 
while ($row = mysql_fetch_array($results2)) { 

    $data2[$i] = $row; 
    $i++; 

} 

在這種情況下,$數據2被聲明爲一個數組,while循環的每次迭代從數據庫到陣列中添加一行。

2

也許我錯過了一些東西,但$data1['id']怎麼可以是一個數組?它可能是一個整數,也許是一個字符串,但它不是一個數組。 $data1['id']是單值;

$results2=mysql_query("SELECT * FROM searchengine WHERE id='{$data1[id]}'"); 

甚至更​​好:場idkeywords

我認爲你需要把周圍的可變彎引號值

$results2=mysql_query("SELECT * FROM searchengine WHERE id=" . (int) $data1['id']); 

如果id是一個整數,是。

當然,如果第一個查詢返回的結果不止一個,您也必須遍歷它們。