任何人都可以解释为什么最后一个查询总是返回1行。它应该返回多于1,因为数据库中有很多记录!
抱歉我的英文不好
$query=mysql_query("SELECT book_id FROM ".DB_PREF."books_cats_list WHERE cat_id='".$cat."'");
if($row=mysql_num_rows($query))
{
//fetching all books from $cat category
for($i=0; $fetch=mysql_fetch_assoc($query); $i++)
{
$records[$i]=$fetch['book_id'];
}
//Joining all records in a string for next query
$records=implode(",",$records);
//returning num rows if there're book_id records in $records array
$query=mysql_query("SELECT * FROM ".DB_PREF."books WHERE book_id IN ('".$records."')");
$rows=mysql_num_rows($query);
echo $rows;
答案 0 :(得分:4)
您的查询将如下所示:
SELECT * FROM books WHERE book_id IN ('2,3,4,5')
请注意IN
内的所有字符串。这一个字符串将转换为int。这是通过停在第一个非数字字符发生的。因此,查询变为:
SELECT * FROM books WHERE book_id IN (2)
尝试删除IN
。
注意:如果您的值不是整数,请尝试将implode
更改为:implode("','",$records)
,并将引号保留在IN
内。
答案 1 :(得分:1)
快速浏览一下我建议使用for循环:
for($i=0; $fetch=mysql_fetch_assoc($query); $i++)
应该是一个while循环:
while($fetch=mysql_fetch_assoc($query))
我希望它只用循环代码做一条记录。
我建议你做左连接选择
SELECT * FROM books_cats_list as cat
left join books as book on cat.book_id = book.book_id
WHERE cat.cat_id='$cat'
就我期望的数据库性能而言,这将更加优化。