Mysql提取json数据并搜索多个值

sky*_*ica 7 mysql sql string json where-clause

嗨,我有汽车列表网站,我想从 JSON 列中过滤多个值 data

我的数据库表如下所示:

id | label    | data
---|----------|---------------------------------
 1 | "test 1" | {"Year":"2014","Gear":"Auto"}
 2 | "test 2" | {"Year":"2010","Gear":"Manual"}
 3 | "test 3" | {"Year":"2009","Gear":"None"}
Run Code Online (Sandbox Code Playgroud)

例如,我想按齿轮过滤,“自动”或“手动”:

SELECT * FROM test WHERE 
JSON_EXTRACT(data, "$.Year") in (2010,2014) AND
JSON_EXTRACT(data, "$.Gear") in ("Auto","Manual")
Run Code Online (Sandbox Code Playgroud)

当我添加过滤器时,查询返回零结果Gear,但过滤器Year工作正常。

mik*_*n32 8

JSON_EXTRACT返回一个包含引号的 JSON 字符串。您可以将其包含在搜索中:

SELECT * FROM test
WHERE JSON_EXTRACT(data, "$.Year") in (2010,2014)
    AND JSON_EXTRACT(data, '$.Gear') IN ('"Manual"','"Auto"');
Run Code Online (Sandbox Code Playgroud)

或者使用JSON_UNQUOTE功能

SELECT * FROM test
WHERE JSON_EXTRACT(data, "$.Year") in (2010,2014)
    AND JSON_UNQUOTE(JSON_EXTRACT(data, '$.Gear')) IN ('Manual','Auto');
Run Code Online (Sandbox Code Playgroud)

请参阅此处的小提琴:https : //www.db-fiddle.com/f/fC48mHEM1nuLUZCTP8CLfs/0