2016-12-14 58 views
4

我有一個像下面這樣的表,用於保存用戶記錄。我想列出權限字段爲0的用戶,然後是權限爲1的用戶。但是,我也想按字母順序排列它們。我如何排序兩個SELECT查詢並將它們組合

這是我的表:

users 
-------------------------------- 
user_id  name  permission 
1   jack  0 
2   anne  0 
3   kate  0 
4   steve  1 
5   roger  0 
6   judy  1 
7   robin  0 
8   stella 1 
9   arthur 0 

而且我想要得到這樣的結果:

users 
--------------------------------- 
user_id  name  permission 
2    anne  0 
9    arthur  0 
1    jack  0 
3    kate  0 
7    robin  0 
5    roger  0 
6    judy  1 
8    stella  1 
4    steve  1 

正如你可以看到,有兩組,先用權限的用戶「0」和稍後的權限「1」。但每個組也按字母順序排序。

(
SELECT * 
FROM `users` 
ORDER BY name ASC 
) 
UNION (

SELECT * 
FROM `users` 
ORDER BY name ASC 
) 
ORDER BY permission ASC 

我試圖通過排序和組合它們來分別得到兩個組,但它不是按我想要的方式工作。

+0

你實際得到了什麼結果? – Takarii

+0

'users'和'name'是兩個不同的表嗎? – Viki888

回答

6

象下面這樣的代碼工作

SELECT * 
FROM `users` 
ORDER BY permission ASC , username ASC 

你應該寫你想要的列的名稱最初由第一順序,那麼第二,第三等

1

您可以按兩個字段排序。不需要做任何事情。

SELECT 
* 
FROM yourtable 
ORDER BY name ASC, 
     permission ASC 
+0

什麼是「NY」。它給出了一個錯誤? – amone

+0

這是一個錯字。它應該是「按順序」。 –

+0

對不起,錯過了編輯@ 1000111 –

5
SELECT 
* 
FROM users 
ORDER BY 
     permission ASC, 
     name ASC; 

您不需要兩個單獨的查詢

首先結果集按升序排序(從低到高) igher)根據permission列的值。

現在您有一個排序列表,其中所有具有0permission的記錄將首先出現。

接下來,如果你name列適用另一類這個排序列表上,則它將使一個字母排序的列表,其中前面的排序順序也同樣適用,因爲這一個。


測試:

create table users(
    id int primary key AUTO_INCREMENT, 
    name varchar(50), 
    permission int 
); 

INSERT INTO users(name,permission) 
VALUES ('A',1),('D',0),('C',0),('B',1); 

SELECT * FROM users; 

id  name permission 

1  A  1 
2  D  0 
3  C  0 
4  B  1 

#Sort only by permission (ASC) 

SELECT * FROM users ORDER BY permission ASC; 

id  name permission 

2  D  0 
3  C  0 
1  A  1 
4  B  1 

#Sort first by permission (ASC), then by name (ASC) 

SELECT * FROM users ORDER BY permission ASC, name ASC; 

id  name permission 

3  C  0 
2  D  0 
1  A  1 
4  B  1 

SEE DEMO