2012-04-13 6 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

最初のクエリ結果と同様に、2番目のクエリ結果を読み取るには、mysql_fetch_assoc()を使用する必要があります。 – MarcinJuraszek

答えて

4

あなたのクエリは次のように見に行くされています

SELECT * FROM books WHERE book_id IN ('2,3,4,5') 

INの内側に、それはすべて1つの文字列のですか。この1つの文字列はintに変換されます。これは、最初の非数字文字で停止することによって行われます。だから、クエリは次のようになります。

SELECT * FROM books WHERE book_id IN (2) 

IN内の単一引用符を削除するようにしてください。

注:値が整数でない場合は、implodeimplode("','",$records)に変更し、引用符をINの内部に入れてください。一目で

+0

、まだ動作していない:( –

+0

OK最後に適用されたノートで動作するようです:) –

+0

@AntonioCiccia:喜んで私は助けることができます:-) –

1

私はforループを示唆:私はそれだけでループコードのそれと一つのレコードをやっている期待

while($fetch=mysql_fetch_assoc($query)) 

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

は、whileループであるべき。私はしかし、あなたが左を行う示唆

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

これは私が期待して、データベースのパフォーマンスの面ではるかに最適となります]を選択し参加します。

関連する問題