1

MySQLに3つのテーブルがあります

USERS
uid
email
password
created

これは、すべてのユーザーのすべてのレコードを含むテーブルです

PHOTOS
iid
uid
file
thumb
uploaded

これは、各ユーザーが投稿したすべての写真が保管されているテーブルです

COMMENTS
cid
iid
uid
message
created

これは、すべてのユーザーによる各写真へのすべてのコメントが保持されているテーブルです。

私が欲しいのは、すべての一意の ( ) ユーザーCOUNTのすべての写真に対するコメントの量 ( )を取得するクエリです。DISTINCT例(結果の出力は次のようになる必要があります):

comment_amount  by_user on_picture
3               1       1
2               2       1
2               1       2
5               2       2
6               2       3

そのため、出力は次のようにフォーマットされているかどうかを教えてくれます(例)

3 comments posted by USER1 on PICTURE1
2 comments posted by USER2 on PICTURE1

2 comments posted by USER1 on PICTURE2
5 comments posted by USER2 on PICTURE2

6 comments posted by USER2 on PICTURE3

私がこれまでに持っているのは

SELECT 
users.uid
FROM users
INNER
    JOIN photos
    ON photos.uid = users.uid
INNER
    JOIN comments
    ON comments.iid = photos.iid

これがサンドボックステストです

http://sqlfiddle.com/#!2/955d5/1

しかし、私は次に何をすべきかわからないので、助けていただければ幸いです! また、MySQL 以外の言語も同様に機能するはずです。

4

4 に答える 4

1
SELECT count(*) AS comment_amount, users.uid AS by_user, photos.iid AS on_picture
FROM users
INNER
    JOIN photos
    ON photos.uid = users.uid
INNER
    JOIN comments
    ON comments.iid = photos.iid
group by users.uid, photos.iid

あるいは単に

SELECT count(*) AS comment_amount, uid AS by_user, iid AS on_picture
FROM comments

コメントテーブルのデータだけが必要な場合

于 2012-10-10T21:14:38.620 に答える
1

最初に GROUP を実行します。

SELECT  iid, uid, count(*)
FROM comments
GROUP BY  iid, uid

その後、関連するテーブルに参加します。

于 2012-10-10T21:18:59.077 に答える
1

クエリは次のようになります。

SELECT users.uid AS UserId, count(comments.cid) AS CountComments
FROM users
INNER
    JOIN photos
    ON photos.uid = users.uid
INNER
    JOIN comments
    ON comments.iid = photos.iid
group by users.uid

あなたはそれをテストすることができます

画像IDを追加したい場合は、photo.iidを追加してグループ化できます

SELECT users.uid AS UserId, count(comments.cid) AS CountComments, 
  photos.iid as PhotoId
  FROM users
INNER
    JOIN photos
    ON photos.uid = users.uid
INNER
    JOIN comments
    ON comments.iid = photos.iid
group by users.uid, photos.iid

見てみな

于 2012-10-10T21:12:06.780 に答える
0
    SELECT 
    users.uid, photos.iid, count(*) nb
    FROM users
    INNER
    JOIN photos
    ON photos.uid = users.uid
INNER
    JOIN comments
    ON comments.iid = photos.iid

group by users.uid, photos.iid

SQLフィドルリンクをありがとう、私は知りませんでした。

于 2012-10-10T21:14:41.603 に答える