WHERE id =(数组)

时间:2011-06-16 22:48:27

标签: php sql

下面的代码只输出单行(数据库中有2个应该输出)。

我认为问题出现在 id = $ data [id] 中,因为data1是数组而不是单个值。我希望会解决这个问题,但它看起来并不像太好了......

    $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))

6 个答案:

答案 0 :(得分: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) . ")"
    );

答案 1 :(得分:2)

也许我错过了什么,但$data1['id']怎么可能是一个数组?它可能是一个整数,也许是一个字符串,但它不是一个数组。 $data1['id']是单个值; id

中字段keywords的值

我认为你只需要在变量周围加上引号:

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

甚至更好:

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

如果id是一个整数。

当然,如果第一个查询返回的结果超过1,你也必须循环遍历它们。

答案 2 :(得分:1)

难道你不能在一个查询中选择整个内容吗?

SELECT *
FROM keywords k
     searchengine s
WHERE k.keyword='$search'
AND k.id = s.id

答案 3 :(得分: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))

答案 4 :(得分:0)

您无法将数组作为条件传递。你应该:

一个。在$ data1数组中执行for(each)循环并执行下一步操作

湾内爆数组并使用IN进行搜索。例如:

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

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

答案 5 :(得分:0)

mads.ohm将两个查询合并为一个查询是正确的。

至于你只得到一个返回值的问题,你的while循环只是每次都覆盖$ data2的内容。

你可以写下这样的东西:

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

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

}

在这种情况下,$ data2被声明为一个数组,而while循环的每次迭代都会在数据库中向数组添加一行。