MySQL: ORDER BY 句で CASE を使用する方法
P粉463291248
P粉463291248 2023-11-01 17:44:15
0
1
664

入力に基づいて行をフィルタリングした後にテーブルを返すストアド プロシージャがあります。入力のうち 2 つは、sort_columnsort_dir です。クエリは sort_dir 方向 (ASC または DESC) で ORDER BY sort_column にする必要があります。

次のクエリを試しましたが成功しませんでした。以下のクエリは、関連する用語のみを含めるように簡略化されています。他のフィルターは問題なく機能します。

  1. SELECT * FROM テーブル ORDER BY sort_column sort_dir
  2. SELECT * FROM テーブル ORDER BY CASE sort_column 'col1' の場合、col1_name WHEN 'col2' THENcol2_name END CASE sort_dir WHEN 'asc' THEN ASC ELSE DESC END

  3. 2 つの入力を _ 形式で 1 ​​つの入力に接続し、次のことを試しました:

    リーリー

エラー #1064 が発生し続けます。上記のそれぞれのケースで異なりますが、常に「CASE」セクションを指します。これは上記のオプション 2 のバグです

##1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンのマニュアルで 4 行目の「WHEN 'col1' THENcol1_name END CASE 'asc' WHEN 'desc」を確認してください。使用する正しい構文'THEN DESC ELSE'

あたり

問題は列名ではないようです。これは機能しない並べ替え方向です。 「ASC」と「DESC」の部分を省略して上記の各オプションを試してみても、問題はありません。

ここで何か間違ったことをしているでしょうか? CASE以外にもっと良い方法はありますか?

MySQL バージョン: 5.6

P粉463291248
P粉463291248

全員に返信(1)
P粉294954447

最良の方法は複数の ケース:

リーリー

長く感じるかもしれません。ただし、CASE は単一の値を返す式であることに注意してください。したがって、ASC および DESCTHEN の一部として使用することはできません。

同様に重要なのは、データ型の問題です。 SQL コンパイラは、CASE 式の単一のタイプを決定します。これにより、列の型が異なる場合に予期しない問題が発生する可能性があります。

最も簡単な解決策は、複数の CASE 式を使用することです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート