2016-03-27 19 views
12

Giả sử tôi có một cột JSON có tên là dữ liệu trong một số bảng mysql và cột này là một mảng duy nhất. Vì vậy, dữ liệu có thể chứa: [1,2,3,4,5] chẳng hạn. Bây giờ tôi muốn chọn tất cả các hàng có cột dữ liệu trong đó một trong các phần tử mảng của nó lớn hơn 2. Điều này có khả thi không? Tôi đã thử những điều sau đây, nhưng dường như nó luôn luôn đúng bất kể giá trị trong mảng:Làm thế nào để tìm kiếm mảng json trong mysql?

SELECT * from my_table where JSON_EXTRACT(data, '$[*]') > 2; 
+0

Bạn có thể tìm kiếm các mảng json trong postgresql, bình thường như các trường khác, trong mysql bạn phải tìm kiếm bằng các hàm mysql mà bạn có thể tìm thấy tại đây: https://dev.mysql.com/doc /refman/5.7/en/json-search-functions.html – Thresh

+0

Cảm ơn, nhưng tôi không thể tìm cách tìm kiếm mảng json bằng các hàm này –

+0

Din bạn quản lý để tìm một giải pháp cho điều này? –

Trả lời

1

Một cách có thể là giải quyết vấn đề như đối sánh chuỗi. Chuyển đổi JSON thành chuỗi và khớp.

Hoặc bạn có thể sử dụng JSON_CONTAINS.

+0

Tôi không chắc rằng kết hợp chuỗi sẽ hoạt động như tôi muốn so sánh không chỉ bằng bình đẳng, tương tự với json_contains, nó tìm kiếm chính xác chứa, không so sánh các hàm. –

0

Tôi không biết liệu chúng tôi có tìm được giải pháp hay không. Tôi tìm thấy với MariaDB một cách, để tìm kiếm đường dẫn trong một mảng. Ví dụ, trong mảng [{ "id": 1}, { "id": 2}], tôi muốn tìm con đường với id bằng 2.

SELECT JSON_SEARCH('name_field', 'one', 2, null, '$[*].id') 
FROM name_table 

Kết quả là:

"$[1].id" 

Dấu hoa thị cho biết tìm kiếm toàn bộ mảng

Các vấn đề liên quan