MySQL(マイエスキューエル)

【MySQL】ソート(ORDER BY)時に特定の値を優先的(一番最初)に持ってくる方法

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なので、もし知らなかった方は、この機会に覚えてしまっておいた方がいいです。

この記事を書いている人
株式会社ディープ
名前足立拓也

メールアドレスadachi@deep-deep.jp

関連記事

最近の記事

  1. ドメインについて
  2. WP:WordPress(ワードプレス)
  3. URL設計(URLデザイン)
  4. URL「ディレクトリ名」と文字アンダースコア(_)とハイフン(-)
  5. SEO対策(外部ファイルの読み込み)
  6. URL リダイレクト
  7. インデックスされない
  8. 内部対策は必要?
  9. CMS(シーエムエス)
  10. SEO業者は必要?

Twitter

アーカイブ

PAGE TOP