MySQL: So verwenden Sie CASE mit der ORDER BY-Klausel
P粉463291248
P粉463291248 2023-11-01 17:44:15
0
1
665

Ich habe eine gespeicherte Prozedur, die eine Tabelle zurückgeben muss, nachdem Zeilen basierend auf der Eingabe gefiltert wurden. Zwei der Eingaben sind sort_columnsort_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.

  1. SELECT * FROM 表 ORDER BY sort_column sort_dir
  2. 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

  3. 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

P粉463291248
P粉463291248

Antworte allen(1)
P粉294954447

最好的方法是多个案例

ORDER BY (CASE WHEN sort_input = 'col1_asc' THEN col1_name END) ASC,
         (CASE WHEN sort_input = 'col1_desc' THEN col1_name END) DESC,
         (CASE WHEN sort_input = 'col2_asc' THEN col2_name END) ASC,
         (CASE WHEN sort_input = 'col2_desc' THEN col2_name END) DESC,

这可能看起来很冗长。但是,请记住 CASE 是返回单个值的表达式。因此,您不能将 ASCDESC 作为 THEN 的一部分。

同样重要的是数据类型的问题。 SQL 编译器决定 CASE 表达式的单一类型。当列具有不同类型时,这可能会导致意外问题。

最简单的解决方案就是使用多个 CASE 表达式。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage