2017-02-14 59 views
2

我有一個查詢從數據庫中根據標題獲取聯繫人。它會查找多個標題,並且如果多個聯繫人從同一個查詢中返回,我希望他們按照特定順序進來。這就是我的意思是:通過同一列的多個值排序結果

這是表的一個例子:

id | name  | title    | email 
-----+-----------+--------------------+------------------ 
1 | Bob  | General Manager | [email protected] 
2 | John  | President   | [email protected] 
3 | Sue  | Owner    | [email protected] 

我的查詢是這樣的:

SELECT * FROM tbl_contacts WHERE title IN ('General Manager', 'Owner', 'President') 

我如何進行的查詢返回一個特定的結果順序(或在我的情況下標題層次)?

我想在訂單始終是結果:

  1. 總經理
  2. 所有者
  3. 總統

如果該實體沒有總經理,爲例如,我想仍然保持相同的層次結構並返回:

  1. 所有者
  2. 總統
+0

外受的功能,沒有辦法做到這一點,我知道的。您的數據庫設計應包含顯示訂單列。 – Mark

回答

3

您想使用FIELD函數。它返回給定字符串集合中搜索字符串的位置。

select * 
from tbl_contacts 
where title in ('General Manager', 'Owner', 'President') 
order by field(title, 'General Manager', 'Owner', 'President') 
+0

就是這樣。謝謝一堆! – eeetee

+0

如果列標題中的某個條目爲NULL,並且我希望所有NULL記錄出現在選定列表的末尾,該怎麼辦?我試圖按字段使用順序,但無論我做什麼,NULL都會先來。 :-( – 300

1

在你的情況簡單ORDER BY可以這樣做:

SELECT * FROM tbl_contacts 
WHERE title IN ('General Manager', 'Owner', 'President') 
ORDER BY title ASC 

的另一種方式,如果標題沒有字母,您可以使用使用FIELD如下:

SELECT * FROM tbl_contacts 
WHERE title IN ('General Manager', 'Owner', 'President') 
ORDER BY FIELD(title, 'General Manager', 'Owner', 'President') 
+0

這會按照他們在IN子句中的順序執行嗎? – eeetee

+0

@eeetee不,這將按字母順序排列。 – Mark

1

設定自己的順序爲:正常的遞增/遞減ORDER的

SELECT * FROM tbl_contacts 
WHERE title IN ('General Manager', 'Owner', 'President') 
ORDER BY CASE 
       WHEN title = 'Owner' THEN 0 
       WHEN title = 'President' THEN 1 
       WHEN title = 'General Manager' THEN 2 
      END 
相關問題