2012-11-07 52 views
-1

我有什麼是「美國國家」的SQL查詢先來?

1. id 
2. employee 
3. state 

,我沒有得到一個想法,我怎麼可以查詢數據庫,其中一個名爲「紐約」的狀態將是第一個和所有其他記錄會正常MySQL表命名員工。以下是我迄今爲止

$sql = "select * from employees order by"; 
+0

你能告訴我們更多關於需求的信息嗎?你爲什麼要按這個順序得到結果? –

+0

實際上我想先在列表中顯示新的yark的工作人員然後其他人。 – user1494854

+0

您可以創建一個新的字段,如'order_id',然後在您的查詢中執行'.... ORDER BY order_id ....'編輯:nicNLD解決方案更好 – Ronnie

回答

9

簡單的選擇:

ORDER BY (state = 'New York') DESC, state 

因爲(state = 'New York')將返回1(真)或0(假),就可以輕鬆訂購的結果,使紐約(其中state = 'New York'返回1)在另一個之前返回狀態。

另一種選擇是使用CASE

ORDER BY CASE WHEN state = 'New York' THEN 0 ELSE 1 END, state 
+0

你可以給我寫完整的$ sql嗎?像 $ sql =「select * from employees order by when state ='New York'」;請記住,我想顯示所有項目,只是在列表中顯示新的第一個項目? – user1494854

+6

是的,我可以但不我不會。你爲什麼不自己做?編寫上面的註釋實際上比您在查詢結束時粘貼我的代碼塊花費更多的工作量。如果你想讓我爲你做好工作,我可以僱用;) –

+3

@NicNLD - 奇怪的是,他幾乎打出他想讓你鍵入的內容,當他要求你鍵入它時... –

3
select * from employees order by state="New York" desc; 

由國家等於紐約,或者沒有這個訂單記錄。我注意到你已經兩次拼寫了New Yark,所以你可能需要對上面的內容進行修改才能使用你的數據。 「desc」會導致順序下降而不是上升,從而將「真實」值放在第一位。

正如JClaspill所指出的,沒有國家等同於「紐約」的記錄將被自然而不是由國家排序。將, state添加到order by語句將按字母順序按狀態對其他記錄進行排序,但首先保留「紐約」記錄。

+1

這是一個很棒的做法。請注意,這隻會將紐約置於頂端。它不會以任何方式排列後面的東西。在desc之後添加',state',然後按順序排列其餘的結果。 – JClaspill

+0

不錯的@JClaspill,澄清了。 OP並沒有真正清楚說明其他記錄應該有什麼命令,但是要注意。 –

0

通過迫使相關國家較高的排名提升了你可以添加一個條件的順序:

mysql [sandbox]> create table t1 (id integer primary key, state varchar(20)); 
mysql [sandbox]> insert into t1 values(1,'Last State'), (2, 'First State'); 
mysql [sandbox]> select * from t1; 
1 Last State 
2 First State 
mysql [sandbox]> select * from t1 order by state='Last State'; 
2 First State 
1 Last State 

這個計算結果爲「假,真」爲2排,這種種帶來的假條件到頂部。

0

$ sql =「SELECT * FROM employees ORDER BY CASE WHEN state = \'New York \'THEN 0 ELSE 1 END,state」;