Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON_ARRAY_APPEND () - Nối Giá trị vào Mảng JSON trong MySQL

Khi sử dụng tài liệu JSON với MySQL, bạn có thể sử dụng JSON_ARRAY_APPEND() hàm để nối các giá trị mới vào một mảng.

Cách thức hoạt động của nó là, bạn cung cấp tài liệu JSON làm đối số đầu tiên, sau đó theo sau đó với đường dẫn để thêm vào, tiếp theo là giá trị để nối thêm.

Trong MySQL 5.7, hàm này được gọi là JSON_APPEND() nhưng tên đó không còn được hỗ trợ.

Cú pháp

Cú pháp như sau:

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

Ở đâu:

  • json_doc là tài liệu JSON.
  • path là đường dẫn của phần tử để nối giá trị mới vào.
  • val là giá trị mới sẽ được thêm vào.

Các cặp giá trị-đường dẫn được đánh giá từ trái sang phải. Tài liệu được tạo ra bằng cách đánh giá một cặp sẽ trở thành giá trị mới mà cặp tiếp theo được đánh giá.

Ví dụ 1 - Cách sử dụng cơ bản

Đây là một ví dụ để chứng minh.

SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4) AS 'Result';

Kết quả:

+--------------+
| Result       |
+--------------+
| [1, 2, 3, 4] |
+--------------+

Vì vậy, đối số thứ 3 được nối vào mảng. Trong trường hợp này, tôi sử dụng $ cho đường dẫn. Đây là một từ đồng nghĩa với tài liệu JSON, vì vậy giá trị được nối vào mảng cấp cao nhất (trong trường hợp này là mảng duy nhất).

Ví dụ 2 - Mảng lồng nhau

Dưới đây là một ví dụ về việc thêm một giá trị vào một mảng được lồng vào bên trong một mảng khác.

SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';

Kết quả:

+-------------------+
| Result            |
+-------------------+
| [1, 2, [3, 4, 5]] |
+-------------------+

Vì vậy, ở đây, tôi sử dụng $[2] như đường dẫn. Điều này chỉ định mảng ở phần tử thứ ba (mảng sử dụng đánh số dựa trên 0, do đó, số lượng bắt đầu từ 0).

Nếu chưa có một mảng tại phần tử đó, một mảng mới sẽ được tạo.

Như thế này:

SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';

Kết quả:

+----------------+
| Result         |
+----------------+
| [1, 2, [3, 4]] |
+----------------+

Ví dụ 3 - Tài liệu JSON lớn hơn

Ví dụ này sử dụng tài liệu JSON lớn hơn (một chút). Điều này cho thấy đường dẫn thay đổi như thế nào tùy thuộc vào vị trí của mảng trong tài liệu.

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';

Kết quả:

+----------------------------------------------------------------------------------+
| Result                                                                           |
+----------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} |
+----------------------------------------------------------------------------------+

Và cũng giống như trong ví dụ trước, chúng ta cũng có thể tạo một mảng lồng nhau mới, nếu được yêu cầu:

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';

Kết quả:

+--------------------------------------------------------------------------------+
| Result                                                                         |
+--------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} |
+--------------------------------------------------------------------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Levenshtein:MySQL + PHP

  2. mysql, lặp qua các tên cột

  3. Di chuyển Laravel:khóa duy nhất quá dài, ngay cả khi được chỉ định

  4. Làm cách nào để CHỌN các hàng có MAX (Giá trị cột), PHẦN CỦA một cột khác trong MYSQL?

  5. Mã PHP để chuyển đổi một truy vấn MySQL thành CSV