Giới thiệu
MySQL 5.7+ hỗ trợ hàm JSON_OBJECTAGG(key, value) để gom nhiều cặp key-value thành một object JSON, rất tiện cho API trả về dữ liệu cấu trúc.
Ví dụ minh họa
Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT,
FirstName VARCHAR(100),
Age INT
);
mysql> INSERT INTO DemoTable VALUES (10, 'John', 23), (20, 'Carol', 21), (10, 'Sam', 24), (20, 'Chris', 20);
Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+------+-----------+------+ | Id | FirstName | Age | +------+-----------+------+ | 10 | John | 23 | | 20 | Carol | 21 | | 10 | Sam | 24 | | 20 | Chris | 20 | +------+-----------+------+
Truy vấn JSON_OBJECTAGG
mysql> SELECT Id, JSON_OBJECTAGG(FirstName, Age) FROM DemoTable GROUP BY Id;
Kết quả
+------+-------------------------------+
| Id | JSON_OBJECTAGG(FirstName,Age) |
+------+-------------------------------+
| 10 | {"Sam": 24, "John": 23} |
| 20 | {"Carol": 21, "Chris": 20} |
+------+-------------------------------+
Các hàm JSON hữu ích khác
JSON_OBJECT(key, val, ...): Tạo object từ cặp cố định.JSON_ARRAYAGG(val): Gom giá trị thành mảng JSON.JSON_EXTRACT(json_col, '$.key'): Trích xuất giá trị từ JSON.->/->>: Toán tử rút gọn cho JSON_EXTRACT.
Lưu ý
- Yêu cầu MySQL 5.7.22+ / 8.0+.
- Key trùng lặp trong cùng group: chỉ giữ giá trị cuối (undefined behavior trước 8.0.17).
- Key không được NULL.
- Kết quả kiểu
JSON, có thể dùng trực tiếp trong ứng dụng.