2012-04-13 56 views
1

任何人都可以解釋爲什麼最後一次查詢總是返回1行。它應該返回多於1,因爲數據庫中有很多記錄!PHP'IN'查詢只返回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

您應該使用mysql_fetch_assoc()來讀取第二個查詢結果,就像第一個查詢結果一樣。 – MarcinJuraszek 2012-04-13 16:42:59

回答

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之內。

+0

嘗試過,仍然不能正常工作:( – 2012-04-13 16:47:33

+0

好吧,它似乎適用於你的最後一個筆記申請:) – 2012-04-13 16:48:22

+0

@AntonioCiccia:很高興我能幫忙:-) – 2012-04-13 17:41:07

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' 

這將是迄今爲止在數據庫性能我預期方面更爲優化。