2016-03-27 1 views
12

Предположим, у меня есть столбец JSON с именем данных в некоторой таблице mysql, и этот столбец представляет собой единый массив. Таким образом, данные могут содержать: [1,2,3,4,5], например. Теперь я хочу выбрать все строки, у которых есть столбец данных, где один из его элементов массива больше 2. Возможно ли это? Я попытался следующие, но, кажется, это всегда верно независимо от значений в массиве:Как искать json-массив в mysql?

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

Вы можете искать json-массивы в postgresql, как и другие поля, в mysql вам нужно искать с помощью функций mysql, которые вы можете найти здесь: https://dev.mysql.com/doc /refman/5.7/en/json-search-functions.html – Thresh

+0

Спасибо, но я не смог найти способ поиска json-массива с помощью этих функций –

+0

Din вам удалось найти решение для этого? –

ответ

1

Возможный способ справиться с этой проблемой, как соответствия строки. Преобразуйте JSON в строку и сопоставьте.

Или вы можете использовать JSON_CONTAINS.

+0

Я не уверен, что сопоставление строк будет работать так, как я хочу сравнить для большего, чем не только равенства, то же самое касается json_contains, он ищет точные содержат, а не сравнивать функции. –

0

Я не знаю, нашли ли мы решение. Я нашел с MariaDB путь, чтобы искать путь в массиве. Например, в массиве [{ "ID": 1}, { "идентификатор": 2}], я хочу найти путь с идентификатором, равным 2.

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

В результате получается:

"$[1].id" 

Звездочка указывает на поиск всего массива