勉強したことのメモ

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のREGEXPで半角記号を検索したい場合の対応方法

MySQLのREGEXPで半角記号を検索したい場合\\を付けてエスケープしないと ...

MySQLでユーザー作成時にエラーが発生

SSHからrootアカウントでMySQLにログインし、ユーザーを作成しようとする ...

MySQLでスレッドの実行状況を表示しスレッドの経過時間チェックや特定スレッドを強制終了する方法

データベースサーバが重たく、原因を調査する機会があった。サーバ自体のメモリやCP ...

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

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

MySQLにて直近のクエリで発行されたAUTO_INCREMENTの値を取得する方法

やりたかったことは「MySQLで新規登録(INSERT)なら、登録時のAUTO_ ...