MYSQL ORDER BY CASE の問題
この質問は、WHERE 条件に応じて特定の列に基づいて行を順序付けする際に問題を引き起こします。 4 つの行とタイムスタンプ列を持つ提供されたデータベースを考えてみましょう。目標は、両方のタイムスタンプ列が単一の順序付け基準として扱われるように行を順序付けすることです。
最初に提供されるクエリは、id_one フィールドと id_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
このアプローチでは、行が各 id_one または id_two グループ内でソートされた出力が生成されますが、タイムスタンプの順序付けが結合されたものではありません。
目的の順序付けを実現するには、少し変更したクエリを使用できます。
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
この改訂されたクエリでは、どの ID 列が WHERE 条件に一致するかに関係なく、timestamp_one と timestamp_two の両方が順序付けの対象となります。 CASE ステートメントは、id_one と id_two の値に基づいて適切なタイムスタンプを選択します。
この変更により、目的の出力が得られます。ここでは、timestamp_one と timestamp_two の両方を考慮して、行が単一のタイムスタンプ列として順序付けされます。
以上がCASE ステートメントを使用して MySQL の複数のタイムスタンプ列に基づいて行を並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。