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

WordPress短期学習プログラム

関連記事

  1. MySQL(マイエスキューエル)
  2. MySQL(マイエスキューエル)

    データベース

    「Unknown collation: 'utf8mb4_unicode_ci'」というエラーが。。…

    あるサイトのサーバ移管作業を行っていた際の話です。データベース(M…

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

    データベース

    【MySQL】検索システムで良く使用する基本的なSQLクエリのまとめ

    検索システムで良く使用するMySQLの基本的なSQLクエリ(S…

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

    データベース

    max_allowed_packet

    弊社で作成して納品したバッチ処理システムがあります。データベースに…

  5. データベース

    久しぶりのMySQLです

    今日は、MySQLで久しぶりにはまりました。そもそ…

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

最近の記事

  1. CakePHP
  2. PHP(ピー・エイチ・ピー)
  3. PHP(ピー・エイチ・ピー)
  4. PHP(ピー・エイチ・ピー)
  5. WP:WordPress(ワードプレス)
  6. WP:WordPress(ワードプレス)
  7. WP:WordPress(ワードプレス)
  8. Security(セキュリティ)
  9. WP:WordPress(ワードプレス)
  10. WP:WordPress(ワードプレス)
PAGE TOP