×

Kiểm tra phần tử trong JSON với hàm JSON_CONTAINS() trong MySQL

Dữ liệu dạng JSON ngày càng phổ biến trong các ứng dụng web hiện đại nhờ vào tính linh hoạt và khả năng lưu trữ nhiều dạng dữ liệu phức tạp. Khi sử dụng MySQL, một trong những chức năng hữu ích để làm việc với JSON là JSON_CONTAINS(). Hàm này cho phép bạn kiểm tra xem một phần tử cụ thể có tồn tại trong một cột JSON hay không.

Giới thiệu về JSON trong MySQL

MySQL cung cấp hỗ trợ mạnh mẽ cho dữ liệu JSON kể từ phiên bản 5.7.8. Với các hàm chuyên biệt như JSON_CONTAINS(), việc thao tác và truy vấn dữ liệu JSON trở nên dễ dàng và linh hoạt hơn.

Cú pháp của JSON_CONTAINS()

Hàm JSON_CONTAINS() có cú pháp cơ bản như sau:

JSON_CONTAINS(target, candidate[, path])
  • target: Đây là dữ liệu JSON mà bạn muốn kiểm tra.
  • candidate: Đây là phần tử bạn muốn tìm trong target.
  • path (tuỳ chọn): Đây là đường dẫn cụ thể trong target nơi bạn muốn thực hiện kiểm tra.

Ví dụ minh họa

1. Kiểm tra một phần tử đơn giản

Giả sử bạn có một bảng tên là products với một cột JSON tên là attributes. Cột này lưu trữ các thuộc tính sản phẩm dưới dạng JSON.

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    attributes JSON
);

Bạn chèn một số dữ liệu vào bảng products như sau:

INSERT INTO products (name, attributes) VALUES
('Laptop', '{"brand": "Apple", "ram": "8GB"}'),
('Smartphone', '{"brand": "Samsung", "ram": "4GB"}');

Bây giờ, bạn muốn kiểm tra xem có sản phẩm nào có brand là "Apple" không:

SELECT name
FROM products
WHERE JSON_CONTAINS(attributes, '"Apple"', '$.brand');

Lệnh trên sẽ trả về sản phẩm "Laptop" vì brand của nó là "Apple".

2. Kiểm tra một mảng phần tử

Giả sử bạn có một cấu trúc JSON phức tạp hơn, chẳng hạn như một danh sách các tags trong cột tags:

INSERT INTO products (name, attributes, tags) VALUES
('Laptop', '{"brand": "Apple", "ram": "8GB"}', '["electronics", "computing"]'),
('Smartphone', '{"brand": "Samsung", "ram": "4GB"}', '["electronics", "mobile"]');

Bạn muốn kiểm tra xem có sản phẩm nào thuộc tag "mobile" không:

SELECT name
FROM products
WHERE JSON_CONTAINS(tags, '"mobile"');

Lệnh trên sẽ trả về sản phẩm "Smartphone" vì nó có tag "mobile".

Các lưu ý khi sử dụng JSON_CONTAINS()

  1. Định dạng JSON hợp lệ: Đảm bảo dữ liệu của bạn là dạng JSON hợp lệ để tránh lỗi khi sử dụng JSON_CONTAINS().
  2. Dấu ngoặc kép (""): Khi so sánh chuỗi, bạn cần sử dụng dấu ngoặc kép kép (""), ví dụ: "Apple" thay vì 'Apple'.

Kết luận

Hàm JSON_CONTAINS() trong MySQL là một công cụ mạnh mẽ giúp bạn dễ dàng kiểm tra và làm việc với dữ liệu JSON. Bằng cách hiểu rõ cú pháp và cách sử dụng, bạn có thể tận dụng tối đa hàm này để tối ưu hóa các truy vấn và thao tác trên dữ liệu phức tạp. Với các ví dụ minh họa rõ ràng, bạn đã có cái nhìn toàn diện về cách ứng dụng JSON_CONTAINS() vào thực tế công việc hàng ngày của mình.

Comments