勉強したことのメモ

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で「Incorrect integer value: '' for column」エラーの対応方法

MySQLで「Incorrect integer value: '' for c ...

adminerでMySQLに接続しようとするとエラーになる場合の対応方法

新しく構築したサーバにadminerを入れて接続しようとすると、「mysqlnd ...

MySQLでphpMyAdminやAdminer上だけ文字化けする場合の対応方法

レンタルサーバーのプログラムでWebページ上では文字化けしていないのに、phpM ...

MySQLでカラム内容によって条件分岐させたい場合の対応方法

MySQLでカラムの内容によって条件を分岐させたかった。またPHPで処理するので ...

MySQLのintのカラムで2147483647の値

MySQLでintのカラムに数値を入れると「2147483647」という値になっ ...