使用join修复复杂查询的语法(高级初学者需要帮助)

时间:2015-12-19 15:08:54

标签: mysql

我一直在尝试整理一个相当复杂的多表查询。我有一个非连接工作查询,它​​看起来像这样:

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。我尝试的任何东西,它给了我一个通用的“你吹了它”错误。你能帮忙吗?

谢谢!

1 个答案:

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