2011-08-03 78 views
1

的多個列目前,我有這個MySQL聲明:排序方式相匹配的變量

SELECT * FROM tablename 
WHERE column1 = 'yes' 
ORDER BY 
     CASE column2 WHEN 'premium' THEN 1 
        WHEN 'basic' THEN 2 
        ELSE 999 
     END, 
     customer_id ASC 

我想另一列加進來....所以這裏是我最終會喜歡做的事。

ORDER BY: 
column2 = premium 
THEN 
column2 = basic 
THEN 
column3 = specialcustomer 
THEN 
display remaining results according to customer_id ASC 

所以輸出的順序我希望它出現。

李四 - 溢價, 薩莉·瓊斯 - 溢價, 吉姆·史密斯 - 基礎 - specialcustomer, 唐·約翰遜 - 基礎 - notspecialcustomer, 瑪麗·李 - 基礎 - notspecialcustomer

+0

KTJ:請顯示您想要的輸出的文字示例。 –

+0

希望澄清。我有一個有2個級別的表格,然後是客戶是否特殊的選項。我想首先在第2欄中顯示那些與優惠相匹配的客戶,然後在第2欄中顯示與基本匹配的客戶,然後在第3欄中顯示與特殊客戶匹配的客戶,然後根據ID號 – KTJ

回答

1
SELECT * FROM tablename 
WHERE column1 = 'yes' 
ORDER BY 
     CASE column2 WHEN 'premium' THEN 1 
        WHEN 'basic' THEN 2 
        ELSE 999 
     END, 
     IF(column3 = 'specialcustomer', 1, 2), 
     customer_id ASC 

column3 = 'specialcustomer'是檢查如果是特殊客戶,應該返回true

什麼在order by節是怎麼回事是 你能想象從這些表達式得到各自的價值這就像3個額外的虛擬列: 1)case ... 2)if ... 3)customer_id

然後行的數據按順序按這些列值排序。

+0

顯示剩餘客戶。查詢後我有一個while循環,現在它拋出一個錯誤。 – KTJ

+0

什麼是錯誤? imre的查詢是否正常運行並返回所需的結果?錯誤是一個單獨的問題?如果是這樣,你可以標記這是答案,如果需要,打開一個新問題 –

+0

不,它仍然不工作,(結果顯示相同),我恐怕我只是沒有得到這個。用原始查詢,沒有錯誤,所以也許我不理解IF語句。最後的1,2是什麼? – KTJ