PHP / MySQL使用长查询检查表之间的数据

时间:2011-06-09 06:18:47

标签: php mysql mysqli

这是一个更详细的问题,因为我之前的尝试不够明确。我是MySQL的新手,并不知道做某些事情的最佳方法。我正在为图像构建一个投票应用程序,并且遇到了MySQL的一些细节问题

我的数据库

_votes

  • ID
  • voter_id
  • image_id

_images

  • ID
  • file_name中
  • entrant_id
  • 批准

_users

  • id
  • ...

基本上我需要做以下事情:

  1. 计算所有获得批准的投票
  2. 以最多票数返回前5名
  3. 检查用户是否已对其他表中的每一个(返回布尔值)投了一票
  4. 我尝试了各种

    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统计投票然后再订购它们。

1 个答案:

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