2013-04-29 4 views
0

У меня есть запрос, который использует оператор OR в предложении WHERE.Результаты заказа операторами `OR` MySQL

Как я могу заказать свои элементы по внешнему виду OR? Например, представьте себе следующий запрос:

SELECT id,message,link,data_hora,like_count FROM mensagens 
WHERE message = 'pineapple juice' OR message = 'pineapple' OR messsage = 'juice' 

Я хотел бы, что результаты первых показал «сок» ананас результаты и после того, как другие, я не мог думать о решении этого с ORDER BY заявлением

+1

только предложение: SELECT ID, сообщение , ссылка, data_hora, like_count FROM mensagens WHERE message IN («ананасовый сок», «ананас», «сок») ORDER BY message DESC –

+0

@AndaIancu Это работает только потому, что сок в алфавитном порядке до ананаса. Если бы это были «кварталы ананаса», у вас было бы «четверти», которые появлялись сначала в списке. – Jonathan

ответ

8

использование FIELD(). Самый простой ответ: MySQL.

SELECT 
FROM 
WHERE 
ORDER BY FIELD(message, 'pineapple juice', 'pineapple', 'juice') 
+1

+1 Гораздо проще, чем случай :) – Andomar

+0

Это потрясающе. Пожелать SQL Server было это! – Aushin

+0

@Andomar sad, так как только mysql имеет это. Надежный сервер sql вскоре поддерживает это. ':)' –

3

Попробуйте использовать CASE выражение

SELECT id,message,link,data_hora,like_count 
FROM mensagens 
WHERE message = 'pineapple juice' OR message = 'pineapple' OR messsage = 'juice' 
ORDER BY CASE message WHEN 'pineapple juice' THEN 0 
         WHEN 'pineapple' THEN 1 
         WHEN 'juice' THEN 2 
     END 
0
order by 
     case message -- First, the where clause order 
     when 'pineapple juice' then 1 
     when 'pineapple' then 2 
     when 'juice' then 3 
     else 4 end 
,  message -- Second, order by message 
0
ORDER BY CASE message WHEN 'pineapple juice' THEN 2 WHEN 'pineapple' THEN 1 WHEN 'juice' THEN 0 END DESC 

Или что-то подобное.

1

Вот один из способов:

order by message = 'pineapple juice' desc, message = 'pineapple' desc, messsage = 'juice' desc 

В MySQL, сравнение возвращает логическое значение, которое интерпретируется как 0 (ложь) или 1 (истина). Значение desc сначала устанавливает истинное значение.

1
order by case when message = 'pineapple juice' then 1 
       when message = 'pineapple' then 2 
       when message = 'juice' then 3 
     end 
1

попробовать что-то вроде этого:

ORDER BY сообщений = 'ананасового сока' DESC, сообщение = 'ананаса' DESC, messsage = 'сок' DESC

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