0


'users'(id、username)、
'photos'(id、user_id、name)、 ' photos_comments
'(id、photo_id、user_id、text)、'photos_likes'(id、photo_id、user_id、テスト)。

アップロードされたすべての写真のすべてのユーザーのすべてのコメントといいねの合計を計算したいと思います。そのために私はクエリを作成しようとしています:

SELECT users.*,
    (SELECT SUM(count) as rating FROM(
   SELECT COUNT(*) as count FROM photos_likes
     WHERE photos_likes.photo_id IN (SELECT photos.id FROM photos WHERE photos.user_id = users.id)
            UNION
   SELECT COUNT(*) as count FROM photos_comments
     WHERE photos_comments.photo_id IN (SELECT photos.id FROM photos WHERE photos.user_id = users.id)
 ) as total_rating) as rating FROM users

'WHERE句の不明なusers.id列'エラーを返します。したがって、ほとんどの内部クエリでユーザーテーブルが表示されないようです。別の同様のクエリが正常に機能するため、なぜ発生するのか理解できません。

SELECT users.*,
    (SELECT COUNT(*) as count FROM photos_likes
  WHERE photos_likes.photo_id IN (SELECT photos.id FROM photos WHERE photos.user_id = users.id)) as likes_count,

   (SELECT COUNT(*) as count FROM photos_comments
     WHERE photos_comments.photo_id IN (SELECT photos.id FROM photos WHERE photos.user_id = users.id)) as comments_count FROM users

このクエリでは、ほとんどの内部クエリのユーザーテーブル行からIDを取得できます。なぜそれがそのように機能しているのですか?手伝ってくれてありがとう。

4

2 に答える 2

2

FROM 句のサブクエリを調べます。

JOIN 操作の ON 句内で使用されない限り、FR​​OM 句のサブクエリを相関サブクエリにすることはできません。

where2 番目の例では、句でサブクエリを使用します。それが違いです。

相関サブクエリも参照してください。

于 2012-11-02T09:50:08.000 に答える
0
select 
    photos.userid, 
    photos.photoid, 
    count(distinct commentid), 
    count(distinct likeid),
    count(distinct commentid) + count(distinct likeid) as total
from
    photos 
         left join photos_comments on photos.photoid=photos_comments.photoid
         left join photos_likes on photos.photoid=photos_likes.photoid
group by photos.userid, photos.photoid
于 2012-11-02T09:09:27.980 に答える