好的,所以我在下面有一个查询,我正在尝试上班。
基本上一切都可以运行,直到'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");
答案 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