勉強したことのメモ

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

MySQLにて指定したカラムがNULLもしくは空の場合、あらかじめ決めておいた内容で表示する方法

  MySQL データベース

何らかのフォームとMySQLを組み合わせた際に任意入力の項目はそのカラムがNULLもしくは空になる。そのデータを管理画面等で表示する際、NULLもしくは空のデータはPHP側で判定し「未入力」のように表示していたが、この辺りをMySQL側で対応したい。以下に対応方法をメモ。

 

テーブル構造とデータ内容

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

mysql> SELECT * FROM `test_table`;
+----+-----------+-----------+
| id | name      | job       |
+----+-----------+-----------+
|  1 | 田中      | 会社員    |
|  2 | 鈴木      | NULL      |
|  3 | 佐々木    | 自営業    |
|  4 | 山田      | NULL      |
|  5 | 斎藤      |           |
+----+-----------+-----------+

 

対応方法

空のカラムは存在しない(NULLだけの判定でいい)場合

空のカラムは気にせず、NULLだけ判定し指定した内容を表示させたい場合は以下のSQL文を実行する。

SELECT `name`, COALESCE(`job`, '未登録') AS job 
FROM `test_table`;

ただ、空のカラムが存在しているとそのまま空として以下のように表示される。

+-----------+-----------+
| name      | job       |
+-----------+-----------+
| 田中      | 会社員    |
| 鈴木      | 未登録    |
| 佐々木    | 自営業    |
| 山田      | 未登録    |
| 斎藤      |           |
+-----------+-----------+

空もNULLも判定する場合

SELECT `name`, 
    CASE 
        WHEN `job` IS NULL OR `job` = '' THEN '未登録' 
        ELSE `job` 
    END AS `job` 
FROM `test_table`;

+-----------+-----------+
| name      | job       |
+-----------+-----------+
| 田中      | 会社員    |
| 鈴木      | 未登録    |
| 佐々木    | 自営業    |
| 山田      | 未登録    |
| 斎藤      | 未登録    |
+-----------+-----------+

 - MySQL データベース

  関連記事

MySQLでdatetime型にもインデックスを使用して高速化を図る方法

ログ関連のデータを格納するテーブルがあり、集計を行う際に非常に時間がかかった。レ ...

MySQLでテキスト(日本語、半角英数字)を暗号化・復号化する方法

MySQLでデータを登録する際に暗号化したいというケースがあった。対象のデータは ...

MySQLで「server has gone~」というエラーの対応方法

MySQLで「MySQL server has gone away」というエラー ...

MySQLのview(ビュー)で仮想的なテーブルを作成する方法

MySQL関連のサイトを見ているとview(ビュー)が云々という記事を見かけた。 ...

MySQLで1対多というテーブル構造でデータ結合と条件検索する方法

MySQLで飲食店舗テーブルと休業日テーブルがあり、1店舗に対して複数行の休業日 ...