Ich habe eine gespeicherte Prozedur, die eine Tabelle nach dem Filtern von Zeilen basierend auf Eingaben zurückgeben muss. Zwei der Eingänge sind sort_column
und sort_dir
. Die Abfrage muss ORDER BY sort_column
in der sort_dir
-Richtung (ASC oder DESC) lauten.MySQL: Verwendung von CASE für ORDER BY-Klausel
Ich habe die folgenden Abfragen aber vergeblich versucht. Die folgenden Abfragen wurden vereinfacht, um nur die relevanten Klauseln zu enthalten. Die anderen Filter funktionieren ordnungsgemäß ohne Probleme.
SELECT * FROM table ORDER BY sort_column sort_dir
SELECT * FROM table ORDER BY CASE sort_column WHEN 'col1' THEN col1_name WHEN 'col2' THEN col2_name END CASE sort_dir WHEN 'asc' THEN ASC ELSE DESC END
I verketteten die 2 Eingänge 1 im Format _ und versucht, dies:
SELECT * FROM table ORDER BY CASE sort_input WHEN 'col1_asc' THEN col1_name ASC WHEN 'col1_desc' THEN col1_name DESC WHEN 'col2_asc' THEN col2_name ASC WHEN 'col2_desc' THEN col2_name DESC END
ich Fehler # 1064 immer. Es ist in jedem der obigen Fälle anders, zeigt aber immer auf den 'CASE' Teil. Dies ist der Fehler für die oben genannte Optionsnummer
## 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden 'wenn 'col1' DANN col1_name END CASE 'asc' WENN 'desc' THEN DESC ELSE' in Zeile 4
Das Problem doesn Es scheint nicht der Name der Spalte zu sein. Es ist die Sortierrichtung, die nicht funktioniert. Wenn ich jede der obigen Optionen ohne die ASC- und DESC-Teile versuche, gibt es kein Problem.
Mache ich hier etwas falsch? Gibt es einen besseren Weg, abgesehen von CASE?
MySQL Version: 5.6
Bitte fügen Sie die Complate-Fehlermeldung, nicht nur ein Teil – Jens
Was ist falsch mit einfach 'ORDER BY sort_column sort_dir'? Sie sollten keine CASE-Anweisung benötigen. Aber es würde die vollständige Fehlermeldung (der "nahe ...." Teil) benötigen, um dies zu beheben. – Thilo
@Jens Ich habe die Frage bearbeitet, um die vollständige Fehlermeldung zu enthalten. Bitte schau es dir an. Vielen Dank. – javaGirl243