MySQLのソートについて
MySQLでレコードをソート(並び替え)して値を取得する場合、
SELECT * FROM テーブル名 ORDER BY カラム名 (昇順/降順)
というSQLクエリを実行しますね。
例えば、
物件テーブル(テーブル名:bukken)から、物件データ登録日(カラム名:created)の新しい順でソートで取得したい場合には,
SELECT * FROM bukken ORDER BY created DESC
というSQLを実行します。
逆に、物件データの登録日が古い順にソートしたい場合には、
SELECT * FROM bukken ORDER BY created ASC
とすればOKです。
※弊社、不動産サイトを作成する機会が多いので、物件検索システムの構築を意識して、例を上げています。
これであれば、誰でもすぐに掛けるSQLだと思います。
今回は、もう少しだけ面倒なSQLについて説明します。
↓
特定の値を優先的に表示させてソートする
上記で、通常のソート方法について、簡単に説明しました。
ただ、ソートする際に、特定の値を優先的に表示させて、物件データを取得したいということもあります。
例えば、
先日、
物件テーブル(テーブル名:bukken)から、物件ステータス(入居中、空室、申込中、建築中)の項目でソートする場合に、
空室の物件を優先的(一番最初)に表示させてほしい、
という案件がありました。
このような場合には、
ORDER BY句に条件を指定すれば、簡単に対応できます。
・物件ステータスのカラム名を「status」、
・各値のコードを「入居中:10001」、「空室:10002」、「退去予定:10003」、「建築中:10004」
とすると、
SELECT * FROM bukken ORDER BY status=10002, status ASC
というSQLクエリを実行します。
「status=10002」という条件を追加することで、
「空室:10002」→「入居中:10001」→「申込中:10003」→「退去予定:10004」の順番にデータを並べることが可能になります。
因みに、
「入居中:10001」の物件というのは、人が住んでいる物件の為、当然、入居者を募集することはできません。
そのような物件をユーザーに見せても意味が無いですよね!
そのような場合には、
SELECT * FROM bukken ORDER BY status>=10002, status ASC
という条件を設定することで、
「空室:10002」以上の物件を優先的にソート表示させることが出来るので、
「入居中:10001」の物件を一番最後に持ってくることも可能です。
知っていれば、誰でも掛ける簡単なSQLです。
よく使うSQLなので、もし知らなかった方は、この機会に覚えてしまっておいた方がいいです。
この記事へのコメントはありません。