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