ホームページ >データベース >mysql チュートリアル >MySQL で条件付きタイムスタンプに基づいて行を並べ替えるにはどうすればよいですか?

MySQL で条件付きタイムスタンプに基づいて行を並べ替えるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-13 04:46:01449ブラウズ

How to Sort Rows Based on a Conditional Timestamp in MySQL?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。