下面的代码只输出单行(数据库中有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))
答案 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循环的每次迭代都会在数据库中向数组添加一行。