mysql where子句查询对象数据所在的json列

时间:2018-11-28 11:56:40

标签: mysql json database where-clause

我在mysql(5.7)表中有以下记录,其中的数据具有json数据类型。

id  data 
1   [{"key": 1,"value": "rom"},{"key": 54,"x": 1}]
2   [{"key": 1,"value": "sun"},{"key": 54,"x": 0.5}]
3   [{"key": 54,"x": 1.2},{"key": 1,"value": "test"}]
4   [{"key": 1,"value": "japan"},{"key": 54,"x": 2}]
5   [{"key": 1,"value": "east"},{"key": 52,"x": 1}]

我想在data列上设置where条件。 如果key = 54且x> = 1,则应重新运行id => 1,3,4

如果key = 54并且x <1,那么它应该重新运行id => 2

1 个答案:

答案 0 :(得分:1)

在这种情况下,处理数组会有些混乱。您最终不得不做一些定位操作,例如follow,虽然它们确实起作用,但不容易阅读或修改。 JSON对象更加灵活。

select id from y where 
(json_contains(doc,"54","$[0].key") or json_contains(doc,'54',"$[1].key")
AND
(json_extract(doc,"$[0].x") >= 1 or json_extract(doc,"$[1].x") >= 1)
);