我有以下值MariaDB 10.4中json列的单元格内:
{
"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_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