2011-06-16 46 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是一个整数,是。

当然,如果第一个查询返回的结果不止一个,您也必须遍历它们。