如何解决计算MariaDB 10.4中json列的数组中具有嵌套值的行数
我在MariaDB 10.4的json列的单元格内具有以下值:
{
"0": [
21,"Pallet da 1250kg (50 * Sacco da 25kg)","1250","kg"
],"1": [
21,"Sfuso","12","2": [
12,"Sacco da 5kg","10","3": [
12,"Pallet da 2500kg (2 * Pallet da 1250kg (50 * Sacco da 25kg))","5000","kg"
]
}
键("0"
,"1"
,"2"
,"3"
)会自动生成。
我想计算每个数组的第二个元素与条件中传递的元素相同的行数。
现在我有能力做这样的事情:
query = '''SELECT COUNT(*) AS rowcount FROM ordine_al_fornitore WHERE JSON_CONTAINS(fca_ordinati,'"''' + myVar + '''"','$.[*]')'''
哪个印刷品是:
SELECT COUNT(*) AS rowcount FROM ordine_al_fornitore WHERE JSON_CONTAINS(fca_ordinati,'"Sacco da 5kg"','$.[*]')
我只知道如何以固定方式($.[*]
传递键,而实际上我想遍历键以检查该值是否存在于数组的单元格1
中(因此算在内)。
我想知道如何改善查询条件。
预先感谢!
解决方法
为此,您需要向JSON_CONTAINS提供平面字符串以进行搜索。
a)JSON_EXTRACT(fca_ordinati,'$.*')
获取对象值的数组
b)JSON_EXTRACT(fca_ordinati,'$.*[1]')
获取每个条目的第二个值(索引1)的数组
c)JSON_CONTAINS(...,'"Sacco da 5kg"')
搜索该数组中的字符串外观
SELECT COUNT(*)
FROM ordine_al_fornitore
WHERE JSON_CONTAINS(
JSON_EXTRACT(fca_ordinati,'$.*[1]'),'"Sacco da 5kg"' -- note the string needs to have quotes
);
这适用于MySQL 5.7.22或更高版本:https://www.db-fiddle.com/f/bNyV8wMbNhF1qTWBCBt7un/0
MariaDB 10.3或更高版本:https://dbfiddle.uk/?rdbms=mariadb_10.3&fiddle=d1c3d750ee2ef58a60d234a58f0fc5d2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。