MySQL in子句字符串到数组
我看到许多类似的问题,有些我怎么也找不到答案。这是交易。我有两张桌子。我试图找到一种方法,将文本数组激发到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 | +--+-----+ +-
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