2012-04-14 102 views
2

有人在这里帮放在一起这是非常有用的查询!ORDER BY打破MySQL查询

SELECT * FROM results r 
INNER JOIN categories c on r.id = c.result_id 
WHERE c.name in ('$purpose', '$prop_type', '$loan_type') 
GROUP BY r.id 
HAVING COUNT(c.c_id) = 3 
LIMIT 50 OFFSET 0 

哪个工作好!但是,当我尝试使用

SELECT * FROM results r 
INNER JOIN categories c on r.id = c.result_id 
WHERE c.name in ('$purpose', '$prop_type', '$loan_type') 
ORDER BY r.usefulness DESC 
GROUP BY r.id 
HAVING COUNT(c.c_id) = 3 
LIMIT 50 OFFSET 0 

命令结果时出现语法错误。我在这里错过了很明显的东西吗

非常感谢!

+0

的应该是你最后的标准顺序 – 2012-04-14 00:59:41

+0

谢谢大家。知道这将是简单的事情! – 2012-04-14 01:03:25

+0

(无关的问题):你可能只需要'选择R *'。不是'SELECT *' – 2012-04-14 01:19:09

回答

3

有用于查询的部分订单,并ORDER BY应在末(LIMITOFFSET前...试试这个:

SELECT * FROM results r 
INNER JOIN categories c on r.id = c.result_id 
WHERE c.name in ('$purpose', '$prop_type', '$loan_type') 
GROUP BY r.id 
HAVING COUNT(c.c_id) = 3 
ORDER BY usefulness DESC 
LIMIT 50 OFFSET 0 

也确保您有空格任何行结束...

通知,在MySQL这是LIMIT x OFFSET y缩短版 - 你可以只写LIMIT y,x

+0

为什么在行尾有空格? – 2012-04-14 01:01:21

+0

有道理,但行尾的空格有点奇怪。 – 2012-04-14 01:10:07

+0

这取决于你如何运行查询,如果(例如)查询是多行字符串(在PHP - 再次为例)当你调用SQL服务器时,它会删除换行符比,如果你没有空间在行的末尾 - 你的线路连接,并导致更好的情况下的错误,或在最坏的情况下不需要的行为... – 2012-04-14 01:11:00

1

ORDER BY有来的HAVING后。