匹配mysql json列的全部内容

mnowg1ta  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(350)

如何匹配整个mysql json列的内容?
例如

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

其中设置是 JSON 列类型。问题是,当我在字段中存储json时,键的排列方式不同。
以上将产生 matches === 0 事实上有很多匹配。

zbwhf8kr

zbwhf8kr1#

答案是使用 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雄辩的orm中,你会:

MyTable::whereRaw('JSON_CONTAINS(my_table.settings, ?)', json_encode($jsonString));
fnx2tebb

fnx2tebb2#

你必须使用 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";

我大部分时间都在使用orms,所以我可能会混淆一些反引号和引号,但我希望你能理解我的想法!

相关问题