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 回答