勉強したことのメモ

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

MySQLに保存したデータをJSON形式で取得する方法

  MySQL データベース

MySQLに保存したデータをJSON形式で利用したいということがたまにある(JavaScript側でそのデータを使いたい時とか)。そのような場合はPHPのjson_encode関数でJSON形式に変換していた。ただSQL文で直接JSON形式指定できるらしい。以下に方法をメモ。

 

テーブル内容

+----+-----------+-----+---------------------+
| id | name      | age | regist              |
+----+-----------+-----+---------------------+
|  1 | 田中      |  20 | 2023-02-13 16:16:01 |
|  2 | 鈴木      |  30 | 2023-02-13 16:16:24 |
|  3 | 佐々木    |  40 | 2023-02-13 16:16:33 |
+----+-----------+-----+---------------------+

 

SQL文

SELECT
    JSON_PRETTY(
        JSON_OBJECTAGG(
            id, 
            JSON_OBJECT(
                'name', name, 
                'age', age,
                'regist', regist
            )
        )
    ) AS reslut 
FROM json_test;

 

以下が結果になる。

{
  "1": {
    "age": 20,
    "name": "田中",
    "regist": "2023-02-13 16:16:01.000000"
  },
  "2": {
    "age": 30,
    "name": "鈴木",
    "regist": "2023-02-13 16:16:24.000000"
  },
  "3": {
    "age": 40,
    "name": "佐々木",
    "regist": "2023-02-13 16:16:33.000000"
  }
}

 

所感

使いどころは限られそうだけど引き出しとして覚えておく。

 

参考サイト

https://www.wakuwakubank.com/posts/872-mysql-aggregate-json/

 - MySQL データベース

  関連記事

MySQLで特定カラムの
タグを改行コードに一括置換させる方法

MySQLで特定カラムの<br>タグを改行コードに一括置換したかった ...

InnoDBのオートインクリメントで抜け番が発生する原因について

MySQLのInnoDBでIDというカラムにオートインクリメント設定していたが、 ...

WordPressサイトのロードアベレージが高い際の対応方法

あるWordPressサイトのロードアベレージが先月ぐらいまでは通常0.5前後で ...

MySQLにてdatetime型のカラムを整形し「年月日のみ形式」または「秒のみ省いた形式」で表示する方法

MySQLにてdatetime型のカラムに登録日時等を格納しており、管理画面側で ...

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

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