条件付きステートメントによる動的並べ替え
このシナリオでは、特定の列に格納されている値に基づいて ORDER BY 句を変更することを目的としています。 、「タイプ」など。課題は次のとおりです:
IF 関数による解決策
最初に次のクエリを提案しました:
SELECT * FROM table WHERE STATUS = 'Active' ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
しかし、このアプローチは間違っています。代わりに、次のように MySQL 内で IF 関数を利用できます。
ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC
CASE ステートメントを使用した代替ソリューション
もう 1 つのオプションは、CASE ステートメントを使用することです。柔軟性の向上:
ORDER BY CASE `type` WHEN 'Member' THEN LNAME WHEN 'Group' THEN GROUPNAME ELSE 1 END ASC
CASE ステートメントは Type 列を評価し、条件に基づいて適切な並べ替え値を返します。 CASE ブロックの結果は並べ替えに使用されます。
ELSE 句を使用して、WHEN 句で明示的に指定されていない他の値を処理できることに注意してください。この例では、これらのシナリオが並べ替え結果の最後に表示されるように、これらのシナリオを処理するために値 1 を割り当てました。
以上がMySQL で列の値に基づいてデータを動的に並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。