2012-05-05 20 views
1

LEFT JOINを使用して別のテーブルからのカウント(*)を導出することができます方法:私はテーブル定義以下のように持っているmysqlの

  • 場所
    (ID、名前)
  • レビュー
    (ID、ユーザーID、placeid)
  • お気に入り
    (ID、ユーザーID、placeid)
  • 写真
    placeidPlaceテーブルのIDへの外部キーである(ID、URL、placeid)
    。そのテーブルの上に

、私はこの種の情報を導出したい:
- placeid, place name, totalReview, totalFavorite, totalPhoto.

私はstuckedです。私の進捗状況は現在、このmysqlステートメントを使用して、totalReviewを知ることができるように、1つのテーブルから情報を得ることができます。 SELECT p.*, count(r.id) as totalReview from Place p left join Review r on p.id = r.placeid group by p.id。 しかし、私はtotalFavoriteとtotalPhotoをどのように引き出すことができるのか分かりません。

答えて

4

あなたが個別に各テーブルを集約する必要があります。

SELECT p.*, 
     totalreview, 
     totalfavorite, 
     totalphoto 
FROM place p 
     LEFT OUTER JOIN (SELECT placeid, 
           Count(*) AS totalReview 
         FROM review 
         GROUP BY placeid) r 
        ON p.placeid = r.placeid 
     LEFT OUTER JOIN (SELECT placeid, 
           Count(*) AS totalFavorite 
         FROM favorite 
         GROUP BY placeid) f 
        ON p.placeid = f.placeid 
     LEFT OUTER JOIN (SELECT placeid, 
           Count(*) AS totalPhoto 
         FROM photo 
         GROUP BY placeid) ph 
        ON p.placeid = ph.placeid 
+0

あなたのソリューション(LEFT JOIN)とEhsanソリューションのパフォーマンス(下段)(http://stackoverflow.com/a/10458566/476917)はどのようになっていますか?私はこの解決策がLEFT JOINなしで解決できることを知らない。 –

+0

+1私の答えが間違っていたことを指摘してくれてありがとう。外側のselectで 'totalFavorite'と' totalPhoto'を忘れないでください。 –

+0

ご報告いただきありがとうございます。私は2つの変数を追加するコードを編集しました。 –

0

これは、これを行うための簡単な方法です:

SELECT 
p.id, p.name, 
(SELECT COUNT(*) FROM Review r WHERE r.placeId=p.id) AS totalReview 
(SELECT COUNT(*) FROM Favorite f WHERE f.placeId=p.id) AS totalFavorite 
(SELECT COUNT(*) FROM Photo ph WHERE ph.placeId=p.id) AS totalPhoto 
FROM Place p 
+0

OPが望んでいるが、LEFT Joinを使用していないレコードを返すことがあります。 –

+0

うわー、私はこの種の問題があなたの単純な解決策を使って解決できることを知らなかった:D、それは動作する!このソリューションは、上記の@Gordon Linoffソリューションに比べて効率的ですか? –

+1

ほとんどのデータベースでは、2つのソリューションで同じクエリプランを作成する必要があります。私は、相関サブクエリからさまざまな理由で恥ずかしがります:私には、読みにくいです。時には、ネストされたループ結合として実装されます。最後に、クエリによって参照されるすべてのテーブルがfrom句に入るのが好きです。 –

関連する問題