加入表问题

时间:2013-05-11 15:18:39

标签: mysql

我有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

我得到了所有的照片,但所有的选票都在第一张唱片中加起来。

修改

很抱歉这么不清楚

enter image description here

所以这是我数据库中的每个图像。假设我以Sean身份登录(user_id 1)我想显示我对每张图片投票的次数。

user_id是谁上传了图片。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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