我需要通过json字段功能过滤产品:
id | name_product | features|
场地特征:
[{
"en": "System Operation",
"it": "Sistema operativo",
"value": "IOS 8"
}, {
"en": "Memory Ram",
"it": "Memoria Ram",
"value": "16 Gb"
}, {
"en": "display",
"it": "schermo",
"value": "5.5\""
}]
有些产品有一些共同的功能,对于过滤器,我试试这个:
SELECT * FROM products WHERE json_extract(features,'$[*].value') = "IOS 8";
和
:
SELECT * FROM products WHERE 'IOS 8' = json_extract(features,'$[*].value');
但结果是一样的:NULL
如果我将位置放在数组而不是*:
SELECT * FROM products WHERE json_extract(feature,'$[1].value') = "IOS 8";
我有结果,问题是:我不知道究竟在哪里。某些产品$[1].value
在其他产品中is $[2].value
在其他产品$[10].value
中
$[*].value
是最好的但是为空:(
如何解决这个问题?
谢谢!!
答案 0 :(得分:3)
尝试:
mysql> DROP TABLE IF EXISTS `products`;
Query OK, 0 rows affected (0.18 sec)
mysql> CREATE TABLE IF NOT EXISTS `products`(
-> `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> `name_product` VARCHAR(50),
-> `features` JSON,
-> PRIMARY KEY (`id`)
-> );
Query OK, 0 rows affected (0.24 sec)
mysql> INSERT INTO `products`
-> (`name_product`, `features`)
-> VALUES
-> ('product 1',
-> '[
'> {"en": "System Operation", "it": "Sistema operativo", "value": "IOS 8"},
'> {"en": "Memory Ram", "it": "Memoria Ram", "value": "16 Gb"},
'> {"en": "display", "it": "schermo", "value": "5.5\'\'"}
'> ]'),
-> ('product 2',
-> '[
'> {"en": "System Operation", "it": "Sistema operativo", "value": "IOS 7"},
'> {"en": "Memory Ram", "it": "Memoria Ram", "value": "16 Gb"},
'> {"en": "display", "it": "schermo", "value": "5.5\'\'"}
'> ]'),
-> ('product 3',
-> '[
'> {"en": "Memory Ram", "it": "Memoria Ram", "value": "16 Gb"},
'> {"en": "display", "it": "schermo", "value": "5.5\'\'"},
'> {"en": "System Operation", "it": "Sistema operativo", "value": "IOS 8"}
'> ]');
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT `id`, `name_product`, `features`
-> FROM `products`
-> WHERE JSON_SEARCH(`features`, 'all', 'IOS 8', NULL, '$[*].value') IS NOT NULL;
+----+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | name_product | features |
+----+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | product 1 | [{"en": "System Operation", "it": "Sistema operativo", "value": "IOS 8"}, {"en": "Memory Ram", "it": "Memoria Ram", "value": "16 Gb"}, {"en": "display", "it": "schermo", "value": "5.5''"}] |
| 3 | product 3 | [{"en": "Memory Ram", "it": "Memoria Ram", "value": "16 Gb"}, {"en": "display", "it": "schermo", "value": "5.5''"}, {"en": "System Operation", "it": "Sistema operativo", "value": "IOS 8"}] |
+----+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)