nur eine Frage ziemlich ähnlich wie diese gefragt ...MySQL orderby eine Reihe, Leer Strings (oder 0en) Last
Zur Zeit mache ich eine sehr grundlegende SortiertNach in meiner Aussage.
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
Das Problem dabei ist, dass leere Zeichenfolge Einträge für ‚Position‘ als 0. Daher alle Einträge mit Position behandelt, als leere Zeichenfolge vor denen mit 1,2,3,4 erscheinen. Beispiel:
'', '', '', 1, 2, 3, 4
oder
0, 0, 0, 1, 2, 3, 4
Gibt es eine Möglichkeit, die folgende Bestellung zu erreichen:
1, 2, 3, 4, '', '', ''.
oder
1, 2, 3, 4, 0, 0, 0
Ich nehme die Lösung eine Art Funktion ersetzen kann, aber ich habe nicht in der Lage gewesen, eine Funktion zu finden, die tut was ich suche, durch google.
Vielen Dank,
JonB
Ich denke, das wird funktionieren, aber es ist nicht die beste Lösung. Ich denke, "position" sollte eine Integer-Spalte sein, und wenn das der Fall ist, sollte der CASE-Ausdruck auch ganze Zahlen verwenden, keine Strings. Wenn "Position" keine Ganzzahl oder zumindest numerisch ist, funktioniert das Sortieren nach Zahlen nicht. Außerdem fügt diese Lösung eine neue Spalte hinzu, nach der sortiert werden kann, was sich wahrscheinlich negativ auf die Leistung auswirkt.Wenn meine Annahme, dass "position" tatsächlich eine Ganzzahl ist, korrekt ist, dann bedeutet der OP wahrscheinlich "NULL" -Wert, wo er 'leere Zeichenfolge' geschrieben hat, was bedeutet, dass Sie einfach 'ORDER BY COALESCE (Position, ~ 0), ID DESC' schreiben können –
@Roland: Das OP impliziert ziemlich klar, dass die Position eine Zeichenkette ist: * "Das Problem dabei ist, dass leere Zeichenketteneinträge für 'Position' wie 0 behandelt werden." * – RedFilter
OrbMan ja, er tat es. Und ich sage, dass das wahrscheinlich ein Teil des Problems ist. Mein Vorschlag war, es vorne einen richtigen Dateityp zu geben, anstatt zu versuchen, danach zu wischen. –