Соответствие всему содержимому столбца MySQL JSON - PullRequest
0 голосов
/ 17 мая 2018

Как мне сопоставить содержимое всего столбца MySQL JSON?

например,

SELECT COUNT(id) as matches 
FROM my_table
WHERE my_table.settings = '{ "color": "red", "location": "Australia", "flavour": "cheese" }'

Где настройки имеют тип столбца JSON.Проблема заключается в том, что когда я сохраняю JSON в поле, ключи располагаются по-разному.

вышеизложенное приведет к matches === 0, когда на самом деле будет много совпадений.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Ответ - использовать функцию JSON_CONTAINS.

SELECT COUNT(id) as matches 
FROM my_table
WHERE JSON_CONTAINS(my_table.settings, '{ "color": "red", "location": "Australia", "flavour": "cheese" }')

Это подходит для случая, когда вы ищете JSON, где вы не знаете структуру с JSON, вы не знаете структуру из

В Laravel Eloquent ORM вы бы:

MyTable::whereRaw('JSON_CONTAINS(my_table.settings, ?)', json_encode($jsonString));
0 голосов
/ 17 мая 2018

Вы должны использовать функцию JSON_EXTRACT.

SELECT COUNT(id) as matches
FROM my_table
WHERE
JSON_EXTRACT(`settings` , '$.color') = "red"
AND JSON_EXTRACT(`settings` , '$.location') = "Australia"
AND JSON_EXTRACT(`setting`, '$.flavour') = "cheese";

Я работаю с ORM большую часть времени, так что я могу перепутать некоторые кавычки и кавычки, но я понимаю, вы поняли!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...