1

次のテーブルを取得しました。

pictures
------------------------------------
id
name
views

votes
------------------------------------
id
user_id
pic_id

各画像 ID、画像のビュー、およびvotes特定の pic_idのテーブルからの総投票数を提供するクエリから結果を取得したい

例:

pictures.id、pictures.views、総投票数

1 ------------ 78-------------------------------- 123

2 ------------ 23-------------------------------- 69

等々...

私が試したコード:

SELECT `pictures`.`id`,`pictures`.`views`, COUNT(`votes`.`pic_id`) as votes
FROM `pictures` 
JOIN `votes`
ON `pictures`.`id` = `votes`.`pic_id`

しかし、それは私が望む結果を私に与えません。

4

4 に答える 4

2

GROUP BY条項が必要です。

を使用すると、 tableに一致するレコードがあるかどうかに関係なくLEFT JOIN、 table のすべてのレコードが表示されます。picturesvotes

SELECT  a.id, a.name, a.views,
        COUNT(b.pic_id) TotalVotes
FROM    pictures a
        LEFT JOIN votes b
            ON a.id = b.pic_id
GROUP   BY a.id, a.name, a.views
于 2013-11-09T19:13:49.683 に答える
1

グループ関数で左結合を使用します。通常の結合キーワードは内部結合を意味し、1対多の関係には左結合が必要です

SELECT `pictures`.`id`,`pictures`.`views`, COUNT(`votes`.`pic_id`) as votes
FROM `pictures` 
LEFT JOIN `votes`
ON `pictures`.`id` = `votes`.`pic_id`
GROUP BY `pictures`.`id`
于 2013-11-09T19:14:05.380 に答える
1

これを試して:

SELECT `pictures`.`id`,`pictures`.`views`, COUNT(`votes`.`pic_id`) as votes
FROM `pictures` 
JOIN `votes`
ON `pictures`.`id` = `votes`.`pic_id`
GROUP BY `votes`.`pic_id`;
于 2013-11-09T19:14:38.037 に答える
1

GROUP BY次の句を使用して、次のように試す必要があります。

SELECT `pictures`.`id`,`pictures`.`views`, COUNT(`votes`.`pic_id`) as votes
FROM `pictures` 
JOIN `votes`
ON `pictures`.`id` = `votes`.`pic_id`
group by `pictures`.`id`
于 2013-11-09T19:14:48.897 に答える