2017-03-03 8 views
1

articleテーブルがあり、私はwhileループでホームページに表示しています。 whileループの中で、私は各記事のコメント数とイメージ数を表示したいと思います。whileループ内の各記事のコメントと画像の表から選択

これは私のために働いていますが、合計で3つのクエリです。最初のクエリでそれを組み合わせて、すべてをループ中に表示しようとしています。ここで私が達成しようとしているものです:私は、次の午前Articles page

現在の形式:

//a represents articles table, c represents comments table, i represents image table 

$query = mysqli_query($conn, "SELECT a.a_id, a.title, a.datetime, a.user_id FROM a ORDER BY a.datetime DESC"); 

while($fetch = mysqli_fetch_assoc($query){ 
    $imageQ = msqli_query($conn, "SELECT COUNT(image_path), image_path FROM i WHERE a_id = '$fetch['a_id']'"); 
$imageFetch = mysqli_fetch_assoc($imageQ); 
$commentQ = mysqli_query($conn, "SELECT COUNT(comment_id) FROM c WHERE a_id = '$fetch['a_id']'"); 
$commentFetch = mysqli_fetch_assoc($commentQ); 
} 

私は記事やコメント数と画像数をフェッチ1つのクエリにこれらのクエリのすべてを詰め込むしたいです各記事と最初の画像のために。

答えて

0

画像やコメントは、データの寸法です。だから、一緒に連れていく方法を慎重に考えなければならない。あなたの場合、結合を行う前に値を集計することができます:

SELECT a.a_id, a.title, a.datetime, a.user_id, 
     i.num_images, c.num_comments 
FROM a LEFT JOIN 
    (SELECT a_id, COUNT(image_path) as num_images 
     FROM i 
     GROUP BY a_id 
    ) i 
    ON i.a_id = a.a_id LEFT JOIN 
    (SELECT a_id, COUNT(comment_id) as num_comments 
     FROM c 
     GROUP BY a_id 
    ) c 
    ON c.a_id = a.a_id 
ORDER BY a.datetime DESC; 
+0

ありがとう@GordonLinoff私は今あなたの方法を使用しています! – Khalid

0

あなたはmysqlのネストされたクエリを使用することができます

のようなものを選択します。 、tab1。 INNER JOINをFROM tab1のINNERがTAB2として、これはあなたが所望の出力を得るために取得することができます

希望のJOIN(C SELECT * FROM)として、TAB2。*(B SELECT * FROM)。

おかげ

関連する問題