1

私は以下のようなテーブル定義を持っています:

  • 場所
    (id、name)
  • レビュー
    (id、userid、placeid)
  • お気に入り
    (id、userid、placeid)
  • 写真
    (id、url、placeid)
    ここで、はテーブルplaceidのIDへの外部キーです。Place

そのテーブルで、私はこの種の情報を導き出したい:
- placeid, place name, totalReview, totalFavorite, totalPhoto.

行き詰まりました。私の現在の進捗状況は、次の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

2 に答える 2

4

各テーブルを個別に集計する必要があります。これが1つの解決策です:

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 
于 2012-05-05T03:27:44.893 に答える
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
于 2012-05-05T03:26:25.660 に答える