質問: ``` SELECT * FROM _table WHERE _tag LIKE '%新幹線%' OR _schedule LIKE '%新幹線%' OR _memo LIKE '%新幹線%' ORDER BY ???_tag,_schedule,_memoの順で並び替えたい??? ``` sqlを発行した際にWHERE句のマッチが早い順番で並び替えたいです。そのようなことがSQLで可能でしょうか? また重複は許可したくありません。 上記の場合ですと、新幹線という文字が、_tag,_schdule,_memoのいづれかに入っている場合に、_tagにマッチしたものを優先的に、その次は_schduleに、最後に_memo内に新幹線という文字が含まれるレコードがほしいです。 よろしくお願い致します。
回答: こんな感じでできるんじゃないかと思います。 ``` SELECT * FROM _table WHERE _tag LIKE '%新幹線%' OR _schedule LIKE '%新幹線%' OR _memo LIKE '%新幹線%' ORDER BY _tag LIKE '%新幹線%' DESC, _schedule LIKE '%新幹線%' DESC, _memo LIKE '%新幹線%' DESC; ``` `LIKE` は適合すると `1`, 適合しないと `0` を返します。`1`→`0` の順に並べるために `DESC` を使用しています。