MySQL ORDER BY CASE ソートの問題
MySQL では、ORDER BY 句を使用して、指定されたカラムに基づいてクエリ結果をソートできます。ただし、特定の条件に応じて複数の列を並べ替えるときに問題が発生する可能性があります。
次のシナリオを考えてみましょう。
timestamp_one と timestamp_two という 2 つの列を持つテーブルがあります。 id_one または id_two が 27 に等しいすべての行を取得する必要があります。さらに、id_one または id_two が 27 であるかどうかに応じて、timestamp_one または timestamp_two に基づいて結果を並べ替える必要があります。
次のクエリは正しく実行されます。必要な行を取得します:
SELECT * FROM tablename WHERE id_one=27 OR id_two=27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one END DESC, CASE WHEN id_two=27 THEN timestamp_two END DESC
行を単一のタイムスタンプに結合して並べ替えるのではなく、各列ごとに個別に並べ替えます。
この問題を解決するには、次のコマンドを使用できます。変更されたクエリ:
SELECT id_one, id_two, timestamp_one, timestamp_two FROM tablename WHERE id_one = 27 OR id_two = 27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one WHEN id_two=27 THEN timestamp_two END DESC
この変更されたクエリでは、単一の CASE 式を使用して並べ替え順序を決定することにより、ORDER BY 句を簡略化します。これにより、id_one と id_two の値に応じて適切な列 (timestamp_one または timestamp_two) を動的に選択する、結合されたタイムスタンプに基づいて行を並べ替えることができます。
以上がMySQL で条件付きタイムスタンプに基づいて行を並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。