如何匹配整个mysql json列的内容?例如
SELECT COUNT(id) as matches FROM my_table WHERE my_table.settings = '{ "color": "red", "location": "Australia", "flavour": "cheese" }'
其中设置是 JSON 列类型。问题是,当我在字段中存储json时,键的排列方式不同。以上将产生 matches === 0 事实上有很多匹配。
JSON
matches === 0
zbwhf8kr1#
答案是使用 JSON_CONTAINS 功能。
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));
fnx2tebb2#
你必须使用 JSON_EXTRACT 功能。
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,所以我可能会混淆一些反引号和引号,但我希望你能理解我的想法!
2条答案
按热度按时间zbwhf8kr1#
答案是使用
JSON_CONTAINS
功能。这适用于搜索不知道结构的json和不知道结构的json的用例
在laravel雄辩的orm中,你会:
fnx2tebb2#
你必须使用
JSON_EXTRACT
功能。我大部分时间都在使用orms,所以我可能会混淆一些反引号和引号,但我希望你能理解我的想法!