我有一张table,里面有所有的产品。产品属性存储在名为properties的json字段中。在json对象中,我有一个用于存储产品映像路径的属性。结构如下所示:
{..., "images": [{"original": "path/to/original", "icon": "path/to/icon", "small": "path/to/small"}, {"original": "path/to/original"}], ...}
如你所见,第二张图片没有任何大小,除了原来的意思,我的应用程序应该创建不同大小的图片。问题是我无法过滤像这样的记录,因为这些记录在图像中的某个数组元素中没有“small”或“icon”(或任意大小)属性。我尝试了以下条件:
... WHERE JSON_CONTAINS_PATH(properties, 'one', '$.images') AND JSON_CONTAINS_PATH(properties, 'all', '$.images[*].icon', '$.images[*].small') = 0;
不幸的是这行不通。据我所知,第二个json_contains_路径应该搜索在images数组的任何元素中丢失图标或小属性的记录。显然不是这样。
使用哪个json函数(如果json包含(路径不是用于此目的的正确路径)在查询中要更改什么(如果是的话)
2条答案
按热度按时间ego6inou1#
我不确定这是怎么回事,但我不能重现你的问题。
json_本身包含_路径(properties,'all','$.images[*].icon'),json_本身包含_路径(properties,'all','$.images.small')。
所以我知道匹配的记录正在被找到。要得到“不匹配”,我需要一张不匹配的唱片。我将缩小它的范围,以便新记录在images数组中没有“小”对象。
重新运行查询:
我得到类似的结果测试'图标'。所以我不确定什么对你不起作用。
pzfprimi2#
我通过使用两种不同的查询解决了问题:
首先,我尝试计算一个产品上传的最大图像数:
然后我根据这个数字形成where条件:
(这张是四张图片。)