2013-04-29 76 views
0

我有一個使用WHERE子句中的OR語句的查詢。通過`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從mensagens在哪裏消息IN('菠蘿汁','菠蘿','果汁')ORDER BY消息DESC – 2013-04-29 14:36:27

+0

@AndaIancu這隻適用,因爲果汁是菠蘿之前的字母順序。如果是「菠蘿宿舍」,你會在列表中首先出現「宿舍」。 – Jonathan 2013-04-29 14:42:07

回答

8

使用FIELD()。在MySQL最簡單的答案。

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

+1比案例簡單:) – Andomar 2013-04-29 14:37:00

+0

這太棒了。希望SQL Server有這個! – Aushin 2013-04-29 14:37:04

+0

@Andomar傷心,因爲只有MySQL有這個。希望sql服務器很快支持這一點。 ':)' – 2013-04-29 14:37:44

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,訊息話題= '果汁' DESC