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

CASE ステートメントを使用して MySQL の複数のタイムスタンプ列に基づいて行を並べ替える方法

Susan Sarandon
リリース: 2024-11-15 09:59:02
オリジナル
648 人が閲覧しました

How to Order Rows Based on Multiple Timestamp Columns in MySQL with CASE Statement?

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 の両方を考慮して、行が単一のタイムスタンプ列として順序付けされます。


| id_one | id_2 | タイムスタンプ_1 | timestamp_two |

| 27 | 35 | 9:30 | NULL |

| 35 | 27 | NULL | 9:33 |

| 27 | 35 | 9:34 | NULL |

| 35 | 27 | NULL | 9:35 |

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

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