Ich habe eine gespeicherte Prozedur, die eine Tabelle zurückgeben muss, nachdem Zeilen basierend auf der Eingabe gefiltert wurden. Zwei der Eingaben sind sort_column
和 sort_dir
。查询必须在 sort_dir
方向(ASC 或 DESC)中 ORDER BY sort_column
.
Ich habe die folgende Abfrage ohne Erfolg versucht. Die folgende Abfrage wurde vereinfacht und enthält nun nur relevante Begriffe. Andere Filter funktionieren einwandfrei und ohne Probleme.
SELECT * FROM 表 ORDER BY sort_column sort_dir
SELECT * FROM table ORDER BY CASE sort_column
wenn 'col1', dann col1_name
WANN 'col2' THEN col2_name ENDE
CASE sort_dir WHEN 'asc' THEN ASC
ELSE DESC ENDE
Ich habe 2 Eingänge mit 1 Eingang im _-Format verbunden und Folgendes versucht:
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 erhalte ständig die Fehlermeldung Nr. 1064. Es ist in jedem der oben genannten Fälle unterschiedlich, verweist aber immer auf den Abschnitt „CASE“. Dies ist der oben erwähnte Fehler bei Option 2
##1064 – Es liegt ein Fehler in Ihrer SQL-Syntax vor; überprüfen Sie im Handbuch für Ihre MySQL-Serverversion nach „WHEN 'col1' THEN col1_name END CASE 'asc' WHEN 'desc' THEN DESC ELSE“ in Zeile 4. Korrekte Syntax zu verwenden um'
Das Problem scheint nicht in der Spaltenbenennung zu liegen. Dies ist eine Sortierrichtung, die nicht funktioniert. Wenn ich jede der oben genannten Optionen ohne die Teile „ASC“ und „DESC“ ausprobiere, gibt es kein Problem.
Mache ich hier etwas falsch? Gibt es einen besseren Weg außer CASE?
MySQL-Version: 5.6
最好的方法是多个
案例
:这可能看起来很冗长。但是,请记住
CASE
是返回单个值的表达式。因此,您不能将ASC
和DESC
作为THEN
的一部分。同样重要的是数据类型的问题。 SQL 编译器决定
CASE
表达式的单一类型。当列具有不同类型时,这可能会导致意外问题。最简单的解决方案就是使用多个
CASE
表达式。