如何匹配整个MySQL JSON列的内容?
e.g。
SELECT COUNT(id) as matches
FROM my_table
WHERE my_table.settings = '{ "color": "red", "location": "Australia", "flavour": "cheese" }'
设置为JSON
列类型。问题是当我在字段中存储JSON时,键的排列方式不同。
以上将产生matches === 0
,实际上有很多匹配。
答案 0 :(得分:2)
您必须使用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合作,所以我可能会混淆一些反引号和引号,但你会得到我希望的想法!
答案 1 :(得分:1)
答案是使用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));