我有两个这样的表:
第一个表名:投票
| type | item_id | user_id |
""""""""""""""""""""""""""""""""""""""""
| like | 45 | james |
| like | 45 | George |
| dislike | 32 | Paul |
第二个表名:项目
| item_id | item_name |
""""""""""""""""""""""""""""""
| 32 | USB |
| 45 | TV |
| 57 | Game |
我想按顺序显示项目,具体取决于他们拥有的票数。 像这样:
TV - > 2
USB - > 1
Game - > 0
我尝试这样的事情:
SELECT items.item_name
FROM items INNER JOIN (
SELECT item_id,COUNT(item_id) as vote
FROM votes
HAVING COUNT(item_id) > 1
ORDER BY COUNT(item_id) DESC
) AS votes ON votes.item_id= items.item_id
WHERE items.item_id= 'item_id'
但什么也没有。请帮助我。
最佳答案
您的查询有几个问题。首先,您有一个不需要的 where
子句,它可能会过滤掉所有内容。其次,您有一个 having
子句也可以过滤掉项目。
如果要获取所有项目,按照得票数排序,还需要一个left outer join
,因为有些项目可能没有得票数:
SELECT items.item_name
FROM items LEFT OUTER JOIN
(SELECT item_id, COUNT(item_id) as vote
FROM votes
HAVING COUNT(item_id) > 1
ORDER BY COUNT(item_id) DESC
) AS votes
ON votes.item_id = items.item_id
ORDER BY coalesce(votes.vote, 0) desc;
最后,你说“投票”,不区分喜欢和不喜欢。我认为这是故意的。
关于php - 在 SQL 中查找并计算重复记录并按最大计数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623807/