1

谁能解释我为什么最后一个查询总是返回 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;
4

2 回答 2

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.

于 2012-04-13T16:43:50.047 回答
1

快速浏览一下,我建议使用 for 循环:

for($i=0; $fetch=mysql_fetch_assoc($query); $i++)

应该是一个while循环:

while($fetch=mysql_fetch_assoc($query))

我希望它只用那个 for 循环代码做一个记录。

但是我建议你做一个左连接选择

SELECT * FROM books_cats_list as cat
left join books as book on cat.book_id = book.book_id
WHERE cat.cat_id='$cat'

就我期望的数据库性能而言,这将更加优化。

于 2012-04-13T16:49:26.103 回答