计算MariaDB 10.4中json列的数组中有多少行具有嵌套值
我有以下价值观在MariaDB 10.4中json列的单元格内:计算MariaDB 10.4中json列的数组中有多少行具有嵌套值,mariadb,mysql-json,mariadb-10.4,Mariadb,Mysql Json,Mariadb 10.4,我有以下价值观在MariaDB 10.4中json列的单元格内: { "0": [ 21, "Pallet da 1250kg (50 * Sacco da 25kg)", "1250", "kg" ], "1": [ 21, "Sfuso",
{
"0": [
21,
"Pallet da 1250kg (50 * Sacco da 25kg)",
"1250",
"kg"
],
"1": [
21,
"Sfuso",
"12",
"kg"
],
"2": [
12,
"Sacco da 5kg",
"10",
"kg"
],
"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_EXTRACTfca_ordinati,$.*,用于获取对象值数组 b JSON_EXTRACTfca_ordinati,'$.*[1]'获取每个条目的第二个值索引1的数组 c JSON_包含…,“Sacco da 5kg”搜索该数组中的字符串外观 选择计数* 来自ordine_al_fornitore 其中JSON_包含 JSON_EXTRACTfca_ordinati,'$.[1]', “Sacco da 5kg”-注意字符串需要有引号 ; 这适用于MySQL 5.7.22或更新版本:
MariaDB 10.3或更高版本:您使用的是什么版本的MySQL?@wchiquito是XAMPP内部的版本。我不太清楚,我怎样才能检索到这些信息?但是,XAMPP的版本是v3.2。4@Memmo我编辑了上面的问题,让读者更清楚地知道这是MariaDB,而不是MySQL。自2010年以来,MariaDB一直在缓慢地从MySQL中分离出来,因此它应该被视为具有不同功能的不同软件产品。@BillKarwin感谢您的支持!我以为XAMPP默认有MySql。然后我调查了一下,发现它有一个名字。我必须了解这些技术的文化。我有一个错误com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在第1行“>”$.[1]”、“Sacco da kg Colli”附近使用的正确语法。这是我打印的查询:从ordine_al_fornitore中选择COUNT*作为rowcount,其中JSON包含SFCA_ordinati->“$.[1]”、“Sacco da 5kg”;这很奇怪,因为它在DB小提琴上工作。选择哪个版本@@version;您正在运行吗?另外,您可以尝试JSON_包含JSON_EXTRACTfca_ordinati、$.[1]、“Sacco da 5kg”的位置。DB服务器:10.4.11-MariaDB-MariaDB.org很高兴它能工作:-我编辑的答案现在应该是正确的,即使对于MariaDB也是如此。->操作符只是JSON_EXTRACT上MySQL的别名,MariaDB不支持它。PS:请始终从平台和版本开始:-您已经询问了MySQL,但您测试了MariaDB的答案。