2016-12-14 4 views
4

Ich habe eine Tabelle wie unten, die Benutzerdatensätze enthält. Ich möchte die Benutzer auflisten, deren Berechtigungsfeld zuerst 0 und dann die Benutzer mit Berechtigung 1 ist. Aber ich möchte sie auch alphabetisch sortieren.Wie kann ich zwei SELECT-Abfrage sortieren und kombinieren

Dies ist meine Tabelle:

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 

Und ich möchte das dieses Ergebnis erhalten:

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 

Wie Sie sehen können, gibt es zwei Gruppen, zuerst die Benutzer mit der Berechtigung „0“ und später Erlaubnis "1". Aber jede Gruppe ist auch alphabetisch sortiert.

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

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

Ich habe versucht, sie die beiden Gruppen getrennt zu erhalten, indem das Sortieren und zu kombinieren, aber es in der Art und Weise funktioniert nicht ich will.

+0

Welches Ergebnis erhalten Sie eigentlich? – Takarii

+0

Sind 'Benutzer' und' Name' zwei verschiedene Tabellen? – Viki888

Antwort

6

Ein Code wie unten arbeitet

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

sollten Sie den Namen der Spalte schreiben, die Sie zuerst anfänglich Auftrag wünschen, dann die zweite, dritte, usw.

1

Sie können einfach nach beiden Feldern sortieren. Keine Notwendigkeit, was auch immer zu tun.

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

Was ist "NY". Es gibt einen Fehler? – amone

+0

Es ist ein Tippfehler. Es sollte "Ordnung nach" sein. –

+0

Sorry für den Tippfehler und danke für die Bearbeitung @ 1000111 –

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

Sie benötigen keine zwei separaten Abfragen.

Zuerst wird das Ergebnis in aufsteigender Reihenfolge (von unten nach h) sortiert basierend auf dem Wert von permission Spalte.

Jetzt haben Sie eine sortierte Liste, in der alle Datensätze mit 0 als permission zuerst angezeigt werden.

Als nächstes, wenn Sie eine andere Sortierung auf name Spalte auf dieser sortierten Liste anwenden, dann wird es eine alphabetisch sortierte Liste machen, wo die vorherige Sortierreihenfolge ebenso wie diese hält.


Test:

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

Verwandte Themen