我一直在尝试整理一个相当复杂的多表查询。我有一个非连接工作查询,它看起来像这样:
SELECT levels.*,users.username,users.countrycode,
FROM levels,users WHERE gameid=$gameid AND users.id=levels.authorid
ORDER BY (SELECT SUM(vote) FROM votes WHERE levelid=levels.id AND
votes.date>=(CURDATE()-INTERVAL 7 DAY)) DESC, levels.created DESC
LIMIT 0,10
我被告知elsewhere进行表连接是一个更好的解决方案。所以我把这个查询放在一起(在Andrew Rueckert的帮助下):
SELECT coalesce(sum(votes.vote),0) as total_vote,
levels.*, users.username,users.countrycode,
FROM levels,users WHERE gameid=1 AND users.id=levels.authorid
LEFT JOIN votes ON votes.levelid=levels.id
WHERE votes.date >= ( CURDATE() - INTERVAL 7 DAY )) GROUP BY levels.id ORDER BY
coalesce(sum(votes.vote),0) DESC
LIMIT 0,10
首先,这第二个查询只是语法错误...我怀疑它是第三行的where子句,但我似乎无法找到一个如何正确组织这个的好答案。任何人都可以告诉我正确的语法吗?
其次,我希望此查询跳过表“投票”中没有SUM(投票)> 0的“级别”中的任何行...但我无法将其转换为工作SQL。我尝试的任何东西,它给了我一个通用的“你吹了它”错误。你能帮忙吗?
谢谢!
答案 0 :(得分:0)
请尝试重写的查询,我认为这是一个语法问题
SELECT coalesce(sum(votes.vote),0) as total_vote,
levels.*, users.username,users.countrycode,
FROM level LEFT OUTER JOIN users on users.id=levels.authorid
LEFT OUTER JOIN votes ON votes.levelid=levels.id
WHERE votes.date >= ( CURDATE() - INTERVAL 7 DAY )) and gameid=1
GROUP BY levels.id ORDER BY coalesce(sum(votes.vote),0) DESC
LIMIT 0,10