MySQL查询按照特定结果/行的另一个表中的投票数来订购结果

时间:2013-12-10 16:25:35

标签: php mysql join subquery

好的,所以我在下面有一个查询,我正在尝试上班。

基本上一切都可以运行,直到'votes'表的内连接。我想要做的是根据每个内容行在另一个名为votes的表中的投票数来排序此查询的结果。我知道我离我不需要做的太远了!

提前致谢!!

mysql_query("
SELECT content.id, content.type, content.title, content.url, users.username
FROM content 
INNER JOIN users ON content.uploaderuid = users.id 
INNER JOIN votes  ON votes.id = content.id
WHERE (content.type = 'pic') 
ORDER BY COUNT(votes.id) DESC");

3 个答案:

答案 0 :(得分:1)

以下是演示以下查询的 SQL Fiddle

SELECT c.id, c.type, c.title, c.url, u.username, COUNT(v.id)
FROM content AS c
INNER JOIN users AS u ON c.uploaderuid = u.id 
INNER JOIN votes AS v ON v.id = c.id
WHERE c.type = 'pic'
GROUP BY c.id, c.type, c.title, c.url, u.username
ORDER BY COUNT(v.id) DESC

答案 1 :(得分:1)

尝试做:

SELECT content.id, content.type, content.title, content.url, users.username
FROM content 
INNER JOIN users ON content.uploaderuid = users.id 
INNER JOIN (
   SELECT id,COUNT(*) as voteCount
   FROM votes  
   GROUP BY id
) v ON v.id = content.id
WHERE (content.type = 'pic') 
ORDER BY v.voteCount DESC

如果您直接使用投票表进行INNER JOIN,如果您有多次出现相同的ID,您将获得比JOIN之前更多的行。

如果您只对每个ID的投票数感兴趣,通过使用子查询来计算每个ID的投票数,将保留您之前的查询结果,并允许您使用voteCount由它订购。

答案 2 :(得分:1)

你可以试试这个:

SELECT c.id, c.type, c.title, c.url, u.username, COUNT(v.id) votes
FROM content c
INNER JOIN users u ON c.uploaderuid = u.id 
INNER JOIN votes v ON v.id = c.id
WHERE c.type = 'pic'
GROUP BY c.id, c.type, c.title, c.url, u.username
ORDER BY votes DESC