我想创建一个列numberofimage
。列中的每个单元格将显示该列numberofimage
中的图像数量addimage
列中每个单元格的格式addimage
如下:
[{"file":"vstorage.com\/sohoa\/han01\/\/123.jpg","name":"123.jpg","type":"image\/jpeg","size":239709},{"file":"storage.com\/sohoa\/han01\/\/456.jpg","name":"456.png","type":"image\/png","size":1030361}]
我会像这样计算每个细胞的数量,但结果却错误:
SELECT * FROM `surveytemplate1`
WHERE addphoto LIKE '%.gif%'
OR addphoto LIKE '"Type:"image\/jpeg"'
OR addphoto LIKE '"Type":"image\/png"'
OR addphoto LIKE '"Type":"image\/jpg"'
因此,在上面的例子中,有 2 张图片,因为有 2 个单词:“ Type:"image\/jpeg
”和“ Type":"image\/png
”
那么我应该使用什么公式来实现我想要的结果?MySQL 是 v5.5
可能的解决方案:
解释:
json_table
将您的 JSON 转换为名为jt
from
whichselect
ing `count(*) 产生结果json_table
指定列,这里我只感兴趣的是file
小提琴:https://www.db-fiddle.com/
要计算图像数量,您可以使用
json_length(addphoto)
。或者通过 JSON_TABLE 扩展 json 并计算行数。
看例子:
测试来源:
简单查询
输出
例如
JSON_TABLE
如果你只想计算选定类型的图像
您只能从 json (
imagetype VARCHAR(100) PATH "$.type"
) 中提取图像类型。小提琴
更新1。
在使用 JSON_TABLE 进行转换之前,检查 JSON 格式的字符串有效性可能会很有用。
我在示例中添加了几行可能出现在您的数据中的数据。
小提琴
对于 MySQL 5.5,我们可以使用
ExtractValue
XML 函数来解析字符串。有数据
到
根据要求
ExtractValue
输出
从
到
提取图像属性:
为了清楚起见,在 group by 之前我们有
小提琴