勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLにてORDER BYで並べ替える際に空のカラムは後ろに持ってくる方法

  MySQL データベース

MySQLにてORDER BYで並べ替える際に空のカラムの場合は後ろに持っていき、その上でID(通し番号)順に並べ替えたい。具体的には「空じゃないカラムのID順→空のカラムのID順」という順序に並べ替えたい。以下に対応方法をメモ。

 

テーブル構造

mysql> SHOW COLUMNS FROM `test_table`;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+

 

データ内容

mysql> TABLE `test_table`;
+----+--------+
| id | name   |
+----+--------+
|  1 | 山田   |
|  2 |        |
|  3 | 鈴木   |
|  4 |        |
|  5 | 田中   |
+----+--------+

 

対応方法

SELECT * 
FROM `test_table` 
ORDER BY 
CASE
    WHEN `name` IS NULL THEN "2"
    WHEN `name` = "" THEN "1"
    else "0"
END, 
    `id` ASC;

+----+--------+
| id | name   |
+----+--------+
|  1 | 山田   |
|  3 | 鈴木   |
|  5 | 田中   |
|  2 |        |
|  4 |        |
+----+--------+

nameカラムが空のデータを後ろに持っていき、その上でID順にソートされた。

 - MySQL データベース

  関連記事

MySQLのバイナリログ(/var/lib/mysql/binlog)を適切に削除する方法

レンタルしているVPS内のファイルを整理していると「/var/lib/mysql ...

エックスサーバーでMySQLのサイズに注意

エックスサーバーで自動更新のログをMySQLに保存するようなシステムを動かしてい ...

mysqlで正規化できない時はシリアライズ使う

アンケートか何かに機能追加している際、配列を カンマ区切りで結合して文字列でDB ...

MySQLで歯抜けになっているint型の数値を取得する

MySQLで歯抜けになっているシーケンス番号を 取得したいケースがあった。 ■ソ ...

MySQLでユニークキーをはる

MySQLでseqとcodeみたいなものをあわせて ユニークキーをはりたかった。 ...