2010-04-05 2 views
3

Для уточнения, можете ли вы использовать MySQL таким образом, чтобы сортировать?Сортировка по значению с помощью ORDER BY?

ORDER BY CompanyID = XXX DESC 

То, что я пытаюсь сделать, это использовать один SQL запрос для сортировки все, где X = Y, в этом случае, где CompanyID = XXX. Все значения, в которых CompanyID не являются XXX, должны появляться после всех результатов, когда CompanyID = XXX.

Я не хочу ограничивать свой запрос, но я хочу сортировать конкретную компанию выше других списков.

+0

Не очень уверен в том, что решения, но '... ORDER BY CompanyID = XXX', безусловно, не так. Возможно, вы могли бы попробовать что-то вроде '... WHERE CompanyID LIKE XXX ORDER BY CompanyID DESC' – themoondothshine

ответ

5

Ваш запрос в порядке. CompanyID = xxx дает 1 в матче и 0 в противном случае. Просто добавьте столбец CompanyID в качестве столбца вторичного заказа.

ORDER BY CompanyID = XXX DESC, CompanyID ASC 

Таким образом, вы получаете записи, в которых CompanyID соответствует вашим постоянным первым, а затем все в порядке.

В качестве альтернативы, вы можете сделать это:

ORDER BY CompanyID <> XXX ASC, CompanyID ASC 
+0

Конечно, почему это не случилось со мной. Так просто. Будет ли это работать с LIKE тоже? CompanyID LIKE %%, CompanyID = Y ASC – Kevin

+0

@Kevin, да, вы можете сделать это с помощью LIKE. –

+0

Спасибо, это сработало для меня на короткий срок. С добавленными здесь ответами я думаю, что в конечном итоге я смогу придумать более гибкое решение, но это вернуло меня в нужное русло. – Kevin

2

Вы могли бы, вероятно, подделку это

SELECT CompanyID, IF(CompanyID = XXX, -1, CompanyID) AS sortby 
FROM companies 
ORDER BY sortby DESC 
+0

+1 Используйте 4 пробела или Ctrl-K, чтобы код появился как код :) – Andomar

7

Вы можете использовать случай в порядке, как:

order by case when CompanyID = XXX then 1 else 2 end 
+0

CASE eh? Узнавайте что-то новое каждый день. – Kevin

2

Вы можете попробовать использовать саз в вашем заказе выражения , Когда идентификатор компании соответствует вашей предпочитаемой компании, верните 0, а затем верните 1. Затем закажите по названию компании, как обычно, во втором порядке по столбцу.

order by case when CompanyID = XXX then 0 else 1 end, CompanyName 

Таким образом, у вас есть предпочтительная компания в верхней части, то все остальной порядок в алфавитном порядке по имени (или же вы хотите заказать).

+0

Я попробую. – Kevin

8
ORDER BY FIELD(CompanyID, 'google', 'apple', 'microsoft') ASC 

Google = первый
Microsoft = третий
Остальное = последняя

+0

+1 Интересно, но функция поля вернет 3 для Microsoft и сортировка по убыванию, поэтому Microsoft будет первой – Andomar

+0

@Andomar - Ошибка, копирование-вставка. :) Исправлено –

+0

Но если вы отсортиветесь по возрастанию, остальные будут первыми! – Andomar

Смежные вопросы