2017-07-29 32 views
0

我在MySQL表中有一个json类型的列,并且该列中的值是一个简单的一维数组(例如[1,2,3,4,5] )。如何使用json_contains函数返回json数组中包含值“5”的所有行?mysql json数据类型搜索数组内的值

回答

0

尝试:

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) 

db-fiddle

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) 

db-fiddle

+0

aah是这就是我做的,但它没有工作,因为我的数组中的值是字符串。我如何让JSON_CONTAINS使用字符串?我试图逃避报价,但它没有奏效。 – manioc

+0

@manioc:更新了答案。 – wchiquito