0
我在MySQL表中有一个json类型的列,并且该列中的值是一个简单的一维数组(例如[1,2,3,4,5] )。如何使用json_contains函数返回json数组中包含值“5”的所有行?mysql json数据类型搜索数组内的值
我在MySQL表中有一个json类型的列,并且该列中的值是一个简单的一维数组(例如[1,2,3,4,5] )。如何使用json_contains函数返回json数组中包含值“5”的所有行?mysql json数据类型搜索数组内的值
尝试:
mysql> DROP TABLE IF EXISTS `tbl`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `tbl` (
-> `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> `json` JSON NOT NULL
->);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO `tbl`
-> (`json`)
-> VALUES
-> ('[1,2,3,4,5]'),
-> ('[1,2,3,4]'),
-> ('[1,2]'),
-> ('[1]'),
-> ('[1,5]');
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT
-> `id`,
-> `json`
-> FROM
-> `tbl`
-> WHERE
-> JSON_CONTAINS(`json`, '5');
+----+-----------------+
| id | json |
+----+-----------------+
| 1 | [1, 2, 3, 4, 5] |
| 5 | [1, 5] |
+----+-----------------+
2 rows in set (0.00 sec)
UPDATE
mysql> DROP TABLE IF EXISTS `tbl`;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `tbl` (
-> `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> `json` JSON NOT NULL
->);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO `tbl`
-> (`json`)
-> VALUES
-> ('["1","2","3","4","5"]'),
-> ('["1","2","3","4"]'),
-> ('["1","2"]'),
-> ('["1"]'),
-> ('["1","5"]');
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT
-> `id`,
-> `json`
-> FROM
-> `tbl`
-> WHERE
-> JSON_CONTAINS(`json`, '"5"');
+----+---------------------------+
| id | json |
+----+---------------------------+
| 1 | ["1", "2", "3", "4", "5"] |
| 5 | ["1", "5"] |
+----+---------------------------+
2 rows in set (0.00 sec)
aah是这就是我做的,但它没有工作,因为我的数组中的值是字符串。我如何让JSON_CONTAINS使用字符串?我试图逃避报价,但它没有奏效。 – manioc
@manioc:更新了答案。 – wchiquito