【问题标题】:Mysql extract json data and search multiple valuesMysql提取json数据并搜索多个值
【发布时间】:2023-03-24 14:16:01
【问题描述】:

您好,我有汽车列表网站,我想从 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"}

例如,我想按 Gear 进行过滤,“自动”或“手动”:

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

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

【问题讨论】:

  • 我在这里没有看到问题或问题描述!
  • JSON_EXTRACT(data, "$.Gear") in ("Automatic","Manuel") 此代码不起作用
  • 您需要详细描述您的目标,然后我们才能帮助您找出问题所在。
  • 当然对不起我的英语,我有来自 mysql 列的 json 数据,当我选择复选框“自动”和“手动”时,我想列出所有这些记录

标签: mysql sql json string where-clause


【解决方案1】:

JSON_EXTRACT returns a JSON string,包括引号。您可以将其包含在搜索中:

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

或者使用the JSON_UNQUOTE function:

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

请看这里的小提琴:https://www.db-fiddle.com/f/fC48mHEM1nuLUZCTP8CLfs/0

【讨论】:

  • 谢谢!!我现在真的很高兴,它的工作!真的再次感谢你!
  • 乐于助人,欢迎来到 Stack Overflow。
【解决方案2】:

我会推荐json operator ->>,它结合了JSON_EXTRACT()JSON_UNQUOTE()

select * 
from test
where data ->> '$.Year' in (2010, 2014) and data ->> '$.Gear' in ('Manual', 'Auto');

->> 在 MySQL 5.7.13 中添加。

【讨论】:

  • 不错,我知道-> 运算符,但不知道->>
  • 警告:这种带有运算符“->”和“->>”的方法在 MariaDB 10.7 中不起作用。目前仅适用于 MySQL。
猜你喜欢
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 2019-08-02
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多