0

参加しようとしているテーブルが 3 つあります。

pictures
--------
id   user_id    link

users
-----
id    name

votes
-----
id    user_id    picture_id

私がやりたいのは、ログインしている特定のユーザーのすべての写真の合計投票数を見つけることです。ほぼすべての写真をループアウトし、ユーザーが写真に投票した場合、再度投票することはできません。

Desired output:
---------------

id    user_id    link    user_name    total_votes
1     5          [link]  Sean         5

これまでのところ、次のようなものがあります。

SELECT 
p.*, u.username, d.total_votes
FROM pictures p 
LEFT JOIN users u 
ON p.user_id = u.id
LEFT JOIN
(
select id, picture_id, count(id) as has_voted from votes
) d on d.picture_id = p.id

私はすべての写真を手に入れましたが、すべての投票は最初のレコードに追加されています。

編集

わかりづらくてすみません

ここに画像の説明を入力

これが私のデータベース内のすべての画像です。Sean (user_id 1) としてログインしているとします。各画像に投票した回数を表示したいとします。

user_id は画像をアップロードした人です。

4

2 に答える 2

1

(更新) 試してください:

Select p.id, p.user_id, p.link, u.name, count(v.id) As total_votes
from pictures p 
join users u on p.user_id = u.id
left join votes v on p.id = v.picture_id and v.user_id = ?
group by p.id
于 2013-05-11T15:55:35.497 に答える
0

これを試して

Select p.id, p.user_id, p.link, u.name,(CASE count(v.id) WHEN NULL THEN 0 ELSE count(v.id) END ) as total_votes
    from pictures p       
    join users u on p.user_id = u.id 
    join votes v on (v.user_id = u.id and v.picture_id = p.id) 
where v.id is not null
    group by p.id
于 2013-05-11T15:29:18.723 に答える