MySQL in子句字符串到数组

MySQL in子句字符串到数组,mysql,sql,arrays,where,Mysql,Sql,Arrays,Where,我看到许多类似的问题,有些我怎么也找不到答案。这是交易。我有两张桌子。我试图找到一种方法,将文本数组激发到in子句中 table.list table.user +--------+ +--------+ |id|list | |id|name | +--+-----+ +--+-----+ | 1|1,2,3| | 1|jack | +--+-----+ +--+-----+ | 2|6,8 | | 2|john | +--+-----+ +-

我看到许多类似的问题,有些我怎么也找不到答案。这是交易。我有两张桌子。我试图找到一种方法,将文本数组激发到in子句中

table.list    table.user
+--------+    +--------+
|id|list |    |id|name |
+--+-----+    +--+-----+
| 1|1,2,3|    | 1|jack |
+--+-----+    +--+-----+
| 2|6,8  |    | 2|john |
+--+-----+    +--+-----+
              | 3|jane |
              +--+-----+
              | 6|jim  |
              +--+-----+
              | 8|jade |
              +--+-----+
这是我可爱的in子句代码

SELECT (SELECT GROUP_CONCAT(user.name) 
          FROM user WHERE user.id in (list.list)
       ) 
FROM list;

我的问题是有没有办法将list.list转换为数组。我知道区别。通常它应该类似于(1,2,3)或('1','2','3'),但现在我有('1,2,3')。任何想法。

您应该添加另一个表来创建
list.id
user.id
之间的链接。在数据库中使用逗号分隔的列表不是一个好主意。它们极难操作,并且比连接索引良好的元组慢得多

如果一个用户只能存在于一个列表中,那么最好在
user
中添加一列。否则,如果用户可以存在于多个列表中,那么您将使用如下内容

list    user          user_to_list
+--+    +--------+    +---------------+
|id|    |id|name |    | userId|listId |
+--+    +--+-----+    +-------+-------+
| 1|    | 1|jack |    |      1|1      |
+--+    +--+-----+    |      2|1      |
| 2|    | 2|john |    |      3|1      |      
+--+    +--+-----+    |      6|2      |
        | 3|jane |    |      8|2      |
        +--+-----+    +-------+-------+
        | 6|jim  |
        +--+-----+
        | 8|jade |
        +--+-----+

您还可以在Wikipedia()上阅读更多关于数据库规范化的内容。

您应该添加另一个表来创建
list.id
user.id
之间的链接。在数据库中使用逗号分隔的列表不是一个好主意。它们极难操作,并且比连接索引良好的元组慢得多

如果一个用户只能存在于一个列表中,那么最好在
user
中添加一列。否则,如果用户可以存在于多个列表中,那么您将使用如下内容

list    user          user_to_list
+--+    +--------+    +---------------+
|id|    |id|name |    | userId|listId |
+--+    +--+-----+    +-------+-------+
| 1|    | 1|jack |    |      1|1      |
+--+    +--+-----+    |      2|1      |
| 2|    | 2|john |    |      3|1      |      
+--+    +--+-----+    |      6|2      |
        | 3|jane |    |      8|2      |
        +--+-----+    +-------+-------+
        | 6|jim  |
        +--+-----+
        | 8|jade |
        +--+-----+
您还可以在Wikipedia()上阅读有关数据库规范化的更多信息。

MySQL 5.5.32架构设置

CREATE TABLE list
    (`id` int, `list` varchar(5))
;

INSERT INTO list
    (`id`, `list`)
VALUES
    (1, '1,2,3'),
    (2, '6,8')
;

CREATE TABLE user
    (`id` int, `name` varchar(4))
;

INSERT INTO user
    (`id`, `name`)
VALUES
    (1, 'jack'),
    (2, 'john'),
    (3, 'jane'),
    (6, 'jim'),
    (8, 'jade')
;
SELECT (SELECT GROUP_CONCAT(user.name) 
 FROM user WHERE instr(concat(' ,',list.list,','),concat(',',user.id,',')) > 1
 ) 
FROM list
jack,john,jane  
jim,jade
查询1

CREATE TABLE list
    (`id` int, `list` varchar(5))
;

INSERT INTO list
    (`id`, `list`)
VALUES
    (1, '1,2,3'),
    (2, '6,8')
;

CREATE TABLE user
    (`id` int, `name` varchar(4))
;

INSERT INTO user
    (`id`, `name`)
VALUES
    (1, 'jack'),
    (2, 'john'),
    (3, 'jane'),
    (6, 'jim'),
    (8, 'jade')
;
SELECT (SELECT GROUP_CONCAT(user.name) 
 FROM user WHERE instr(concat(' ,',list.list,','),concat(',',user.id,',')) > 1
 ) 
FROM list
jack,john,jane  
jim,jade

CREATE TABLE list
    (`id` int, `list` varchar(5))
;

INSERT INTO list
    (`id`, `list`)
VALUES
    (1, '1,2,3'),
    (2, '6,8')
;

CREATE TABLE user
    (`id` int, `name` varchar(4))
;

INSERT INTO user
    (`id`, `name`)
VALUES
    (1, 'jack'),
    (2, 'john'),
    (3, 'jane'),
    (6, 'jim'),
    (8, 'jade')
;
SELECT (SELECT GROUP_CONCAT(user.name) 
 FROM user WHERE instr(concat(' ,',list.list,','),concat(',',user.id,',')) > 1
 ) 
FROM list
jack,john,jane  
jim,jade

MySQL 5.5.32架构设置

CREATE TABLE list
    (`id` int, `list` varchar(5))
;

INSERT INTO list
    (`id`, `list`)
VALUES
    (1, '1,2,3'),
    (2, '6,8')
;

CREATE TABLE user
    (`id` int, `name` varchar(4))
;

INSERT INTO user
    (`id`, `name`)
VALUES
    (1, 'jack'),
    (2, 'john'),
    (3, 'jane'),
    (6, 'jim'),
    (8, 'jade')
;
SELECT (SELECT GROUP_CONCAT(user.name) 
 FROM user WHERE instr(concat(' ,',list.list,','),concat(',',user.id,',')) > 1
 ) 
FROM list
jack,john,jane  
jim,jade
查询1

CREATE TABLE list
    (`id` int, `list` varchar(5))
;

INSERT INTO list
    (`id`, `list`)
VALUES
    (1, '1,2,3'),
    (2, '6,8')
;

CREATE TABLE user
    (`id` int, `name` varchar(4))
;

INSERT INTO user
    (`id`, `name`)
VALUES
    (1, 'jack'),
    (2, 'john'),
    (3, 'jane'),
    (6, 'jim'),
    (8, 'jade')
;
SELECT (SELECT GROUP_CONCAT(user.name) 
 FROM user WHERE instr(concat(' ,',list.list,','),concat(',',user.id,',')) > 1
 ) 
FROM list
jack,john,jane  
jim,jade

CREATE TABLE list
    (`id` int, `list` varchar(5))
;

INSERT INTO list
    (`id`, `list`)
VALUES
    (1, '1,2,3'),
    (2, '6,8')
;

CREATE TABLE user
    (`id` int, `name` varchar(4))
;

INSERT INTO user
    (`id`, `name`)
VALUES
    (1, 'jack'),
    (2, 'john'),
    (3, 'jane'),
    (6, 'jim'),
    (8, 'jade')
;
SELECT (SELECT GROUP_CONCAT(user.name) 
 FROM user WHERE instr(concat(' ,',list.list,','),concat(',',user.id,',')) > 1
 ) 
FROM list
jack,john,jane  
jim,jade