2011-10-29 19 views
0
SELECT li.listing_id, li.title, p.name, c.comment, COUNT(*) AS pic_count 
    FROM listings li 
    LEFT JOIN photos p ON li.listing_id = p.listing_id 
    LEFT JOIN comments c ON li.listing_id = c.listing_id 
    WHERE li.listing_id =1 
    GROUP BY li.listing_id 
    LIMIT 1; 

上記のクエリは、指定されたlisting_idの写真数を返します。同じクエリでそのlisting_idのコメント数をカウントしたいのと同じですか? 1つのクエリで2つのカウント..1回のクエリで複数のレコード数をカウントする

答えて

3

カウントが間違っています。リストでグループ化する場合は、p.nameをフィールドリストに含めないでください。しかし、それがなくても、*のカウントのため、写真のないリストの場合は1になります。あなたの写真のは、一意のIDを持っている場合

、あなたがこれを行うことができます:

SELECT li.listing_id, li.title, 
    COUNT(DISTINCT p.photo_id) as photo_count, 
    COUNT(DISTINCT c.comment_id) as comment_count 
FROM listings li 
    LEFT JOIN photos p ON li.listing_id = p.listing_id 
    LEFT JOIN comments c ON li.listing_id = c.listing_id 
WHERE li.listing_id =1 
GROUP BY li.listing_id 
LIMIT 1; 
+0

よく、 – XoR

+0

は 'Cがあった..私は、各テーブルの一意のIDを持っていますが、それでもあなたのクエリが実行に失敗します.comment'と私が見落としたフィールドリストに余分なカンマがあります。私はそれらを削除しました。それでも問題が解決しない場合は、もう一度お試しください。 – GolezTrol

+0

はいそれは機能します! :) – XoR

関連する問題