mysql 5.7 json_extract 带有产品表中所有结果的键

标签 mysql json


我需要通过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 在其他产品中是 $[2].value 在其他产品中 $[10].value
$[*].value 是最好的,但为 null :(
如何解决这个问题?
谢谢!!

最佳答案

尝试:

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)

关于mysql 5.7 json_extract 带有产品表中所有结果的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36693654/

相关文章:

来自换行符的 MySQL 子字符串

mysql - Windows:如何在不会​​关闭的 shell 窗口中打开 .exe?

jquery - 从所有具有 class 的元素中获取 id 和 text 并将其放入 JSON 数组中

java - 如何使用 jackson 将 json 文档的额外属性反序列化为 map 或其他字段?

mysql - 根据日期间隔聚合值

PHP PDO 查询不工作

javascript - Sequelize 查询符合 $LIKE 的要求,但收到 ER_PARSE_ERROR

json - 为从 JSON 读取的数据分配适当的类型

json - 具有嵌套属性的 Golang YAML 到 JSON

json - 如何在新的 Mono 类库上使用 JSON.Net?