匹配 MySQL JSON 列的全部内容

And*_*gan 5 php mysql json database-design laravel

如何匹配整个 MySQL JSON 列的内容?

例如

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

其中设置是JSON列类型。问题是当我在字段中存储 JSON 时,键的排列方式不同。

matches === 0当实际上有很多匹配时,上面的结果就会产生。

Loe*_*oek 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";
Run Code Online (Sandbox Code Playgroud)

我大部分时间都在使用 ORM,所以我可能会混淆一些反引号和引号,但我希望您能明白!