ホームページ > データベース > mysql チュートリアル > 条件付きソートを使用して複数のタイムスタンプ列に基づいて MySQL 行を並べ替える方法

条件付きソートを使用して複数のタイムスタンプ列に基づいて MySQL 行を並べ替える方法

Mary-Kate Olsen
リリース: 2024-11-16 02:37:03
オリジナル
952 人が閲覧しました

How to Order MySQL Rows Based on Multiple Timestamp Columns with Conditional Sorting?

MySQL ORDER BY CASE ステートメントの問題: 複数のタイムスタンプ列の順序付け

MySQL では、ORDER BY 句は通常、結果を並べ替えるために使用されます。特定の列に基づくクエリ。ただし、条件付きで順序付けする必要がある複数の列を扱う場合、共通の課題が発生します。

次のシナリオを考えてみましょう。

-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27     | 35     |    9:30      |     NULL     |
-------------------------------------------------------------------
| 35     | 27     |     NULL     |    9:35      |
-------------------------------------------------------------------
| 27     | 35     |    9:34      |     NULL     |
-------------------------------------------------------------------
| 35     | 27     |     NULL     |    9:33      |
-------------------------------------------------------------------
ログイン後にコピー

のような構造を持つデータベース テーブルがあるとします。目標は、特定の条件を考慮しながら、4 行すべてを取得し、timestamp_one と timestamp_two の両方で順序付けすることです。具体的には、id_one が 27 に等しい場合、行は timestamp_one によって順序付けされる必要があります。それ以外の場合、id_two が 27 に等しい場合は、timestamp_two で順序付けする必要があります。

これを実現するために、次のような ORDER BY 句で CASE ステートメントを使用する試みが数多く行われます。

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
ログイン後にコピー

このアプローチでは、個々の行に望ましい順序が得られますが、2 つのタイムスタンプ列を単一の列としてみなさないため、統合された順序に結合することはできません。 entity.

解決策:

必要に応じて行を並べ替えるには、ORDER BY 句で CASE ステートメントの修正バージョンを使用できます:

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 
ログイン後にコピー

この変更により、timestamp_one と timestamp_two の両方が 1 つのエンティティとして扱われ、それに応じて行が順序付けされます。 CASE ステートメントは、WHERE 句で指定された条件に基づいて両方のタイムスタンプ列に降順を割り当て、行が全体として順序付けられるようにします。

以上が条件付きソートを使用して複数のタイムスタンプ列に基づいて MySQL 行を並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート