常に設定されている最初のフィールドで並べ替える場合は、フィールドの抽出を試すことができます。
ORDER BY SUBSTRING_INDEX(date_of, ',', 1);
実際にはdate_of
、辞書順が維持されているため、 で並べることができます。最後のサブフィールドで注文すると困りますが、最初のサブフィールドが欲しいので...
「日付の最初の要素が過去の場合」は少し注意が必要です。
ORDER BY CASE WHEN SUBSTRING_INDEX(date_of, ',', 1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(date_of, ',', 1)
ELSE ... END
開始することができますが、2 番目のサブフィールドがない場合はどうなりますか? SUBSTRING_INDEX を繰り返すと、最初のフィールドが再び取得されます。
それ自体を反復する必要がありCASE
ます。戦慄
ORDER BY CASE WHEN SUBSTRING_INDEX(date_of, ',', 1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(date_of, ',', 1)
ELSE
CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 2),',',-1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 2),',',-1)
ELSE
CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 3),',',-1) > UNIX_TIMESTAMP()
THEN SUBSTRING_INDEX(SUBSTRING_INDEX(date_of, ',', 3),',',-1)
ELSE 999999999
END
END
END
この構造からは素晴らしいパフォーマンスが得られないことがわかります。3 つの異なる列に 3 つの日付を入れるか、別のテーブルに日付を入れるようにモデルを再設計することを強くお勧めします。