2009-08-28 10 views
6
bestellen

dies ist mein Code für jetzt:Sortieren nach null zuerst, dann von einer anderen Variablen

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY id, number 

aber ich will es so aussehen:

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY while(number IS NULL), id 

Was ich zu tun haben will, ist alle number die NULL auf der Oberseite des Ergebnisses sind, aber so schnell ist number nicht NULL, sortiert nach id

ist das möglich?

Ich benutze mysql.

Antwort

19

was ist so etwas wie dieses:

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY (case when number is null then 0 else 1 end), id 

Wenn Zahl NULL ist, der erste Auftrag von Kriterien 0 sein wird; sonst 1
Das bedeutet, dass jede Zeile wird NULL wird vor den anderen kommen

Und beachten Sie, dass IDs wird auch sortiert werden.

Sie werden so etwas wie dieses:

  • Nummer null; ID = 1
  • Nummer null; id = 2
  • Anzahl Null; ID = 5
  • Anzahl Null; ID = 8
  • Nummer nicht null; ID = 3
  • Nummer nicht null; ID = 4
  • Nummer nicht null; ID = 7
  • Nummer nicht null; ID = 10
  • Nummer nicht null; ID = 12
+0

So mache ich es normalerweise auch. – RiddlerDev

+0

Ausgezeichnet! Schnelle Antwort, und es funktionierte zum ersten Mal, als ich es versuchte. Vielen Dank! – Johan

+0

Gern geschehen :-) Viel Spaß! –

-1

Union könnte auch verwendet werden.

+0

Abgesehen von einer etwas falschen Syntax (fehlende Klammern) ist dies nicht sinnvoll, da die 'UNION' nicht die Erhaltung der Reihenfolge einzelner Selects garantiert. Außerdem erzeugt dies einen unnötig teuren Ausführungsplan (zwei "NULL" -Kontrollen in der Spalte "Anzahl"). –

1

Die ISNULL() - Funktion gibt 1 zurück, wenn der Parameter null ist und andernfalls 0.

Wohlgemerkt, für die Leistung schrecklich, abhängig davon, wie viele Werte es bestellen muss: basierend auf den ORDER BY-Spalten wird kein Index verwendet.

Verwandte Themen