2012-04-14 5 views
2

Кто-то здесь помог собрать этот чрезвычайно полезный вопрос!ORDER BY break mysql query

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

Поручения должны быть ваши последние критерии –

+0

Спасибо всем. знал, что это будет что-то простое! –

+0

(не связанный с проблемой): Вам, вероятно, нужно только 'SELECT r. *'. Не 'SELECT *' –

ответ

3

есть порядок для частей запроса, и ORDER BY должны быть в конце (перед LIMIT и OFFSET ... попробуйте это:

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

Почему есть пробелы в конце строк? –

+0

Имеет смысл, но пробелы в конце строк немного странны. –

+0

зависит от того, как вы выполняете запрос, если (например) запрос находится в многострочной строке (например, в PHP), чем при вызове SQL-сервера он удаляет разрывы строк, а если у вас нет пробелов в конце строки - ваши линии соединяются, и это вызывает ошибки в лучшем случае или нежелательное поведение в худшем случае ... –

1

ORDER BY должен прибыть после HAVING.