检查元素是否包含在 MySql 中的 json 列的值(数组)中
Check if an element is contained in the values (array) of a json column in MySql
我在 MySql 中的 json 列的单元格内有以下值:
{
"produttori": [
"8",
"9"
],
"articoli_alternativi": [
"3",
"9"
],
"articoli_accessori": [
"5",
"6",
"7",
"8"
],
"tecnologie": [],
"fornitori": [
"9",
"8"
],
"classificazioni": [
"3",
"4"
]
}
我想进行一个查询,根据数组中 fornitori
键处是否存在一个值来提取数据。
现在我试过这个:
query = 'SELECT nome, formulati_commerciali FROM articolo WHERE JSON_CONTAINS(JSON_EXTRACT(dati, "$.fornitori"), "' + \
value+'", "$")'
哪个打印是:
SELECT name, data FROM articolo WHERE JSON_CONTAINS(JSON_EXTRACT(data, "$.fornitori"), "8", "$")
基本上条件是 value
("8"
) 必须在 fornitori
列表内,否则跳过该元素。
不幸的是,查询没有产生任何结果。
我想知道如何在 MySql 中制定这样的查询。我会经常需要它们!
提前致谢!
应该这样做:
SELECT name, data
FROM articolo
WHERE JSON_CONTAINS(data, '"8"', '$.fornitori')
8
周围的双引号很重要,以便正确匹配 JSON 数据。另一方面,查询始终对字符串文字使用单引号。
您可以使用
SELECT data
FROM
(
SELECT @i := @i + 1 AS rn,
JSON_UNQUOTE(JSON_EXTRACT(data,CONCAT('$.fornitori[',@i-1,']'))) AS elm,
data
FROM information_schema.tables
CROSS JOIN articolo
CROSS JOIN (SELECT @i := 0) r
) q
WHERE elm = 8
以便在特定的范围内搜索特定的值
阵列("fornitori"
)
我在 MySql 中的 json 列的单元格内有以下值:
{
"produttori": [
"8",
"9"
],
"articoli_alternativi": [
"3",
"9"
],
"articoli_accessori": [
"5",
"6",
"7",
"8"
],
"tecnologie": [],
"fornitori": [
"9",
"8"
],
"classificazioni": [
"3",
"4"
]
}
我想进行一个查询,根据数组中 fornitori
键处是否存在一个值来提取数据。
现在我试过这个:
query = 'SELECT nome, formulati_commerciali FROM articolo WHERE JSON_CONTAINS(JSON_EXTRACT(dati, "$.fornitori"), "' + \
value+'", "$")'
哪个打印是:
SELECT name, data FROM articolo WHERE JSON_CONTAINS(JSON_EXTRACT(data, "$.fornitori"), "8", "$")
基本上条件是 value
("8"
) 必须在 fornitori
列表内,否则跳过该元素。
不幸的是,查询没有产生任何结果。
我想知道如何在 MySql 中制定这样的查询。我会经常需要它们!
提前致谢!
应该这样做:
SELECT name, data
FROM articolo
WHERE JSON_CONTAINS(data, '"8"', '$.fornitori')
8
周围的双引号很重要,以便正确匹配 JSON 数据。另一方面,查询始终对字符串文字使用单引号。
您可以使用
SELECT data
FROM
(
SELECT @i := @i + 1 AS rn,
JSON_UNQUOTE(JSON_EXTRACT(data,CONCAT('$.fornitori[',@i-1,']'))) AS elm,
data
FROM information_schema.tables
CROSS JOIN articolo
CROSS JOIN (SELECT @i := 0) r
) q
WHERE elm = 8
以便在特定的范围内搜索特定的值
阵列("fornitori"
)