这是一个更详细的问题,因为我之前的尝试不够明确。我是MySQL的新手,并不知道做某些事情的最佳方法。我正在为图像构建一个投票应用程序,并且遇到了MySQL的一些细节问题
我的数据库
_votes
_images
_users
基本上我需要做以下事情:
我尝试了各种
SELECT i.id, i.file_name, i.total_votes
FROM _images i WHERE i.approved = 1
CASE WHEN (SELECT count(*) from _votes v WHERE v.image_id = i.id AND v.voter_id = ?) > 0 THEN '1' ELSE '0' END 'hasvoted'
ORDER BY i.total_votes DESC LIMIT ".($page*5).", 5
是我应该尝试在一个查询中完成的事情吗?
在尝试添加'hasvoted'布尔值之前,此查询工作正常:
SELECT id, file_name, total_votes FROM _images WHERE approved = 1 ORDER BY total_votes DESC LIMIT ".($page*5).", 5
目前我还将投票计数存储在_images表中,我知道这是错误的,但我不知道如何通过image_id统计投票然后再订购它们。
答案 0 :(得分:2)
让我试一试,看看我是否理解你的问题:
SELECT i.*,(SELECT COUNT(*) FROM _votes WHERE i.id = image_id) AS total_votes, (SELECT count(*) from _votes where i.id = image_id and user_id = ?) as voted FROM _images AS i WHERE i.approved = 1