匹配MySQL JSON列的全部内容

时间:2018-05-17 07:45:14

标签: php mysql json laravel database-design

如何匹配整个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,实际上有很多匹配。

2 个答案:

答案 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));