我想从user_info表中获取所有admin用户。在user_info表中,groups列为多值属性。我试过的是:
select * from user_info where 'admin' IN Split(',',groups);
我收到此错误:
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法 靠近'Split(',',groups)
user_info表
username | groups |
---------------------------------
ABC@mail.com | superadmin,admin
分组表
groupID(AutoIncr) | groups |
---------------------------------
1 | superadmin |
2 | admin |
答案 0 :(得分:1)
对于您的解决方案,这是一个有效的查询
从user_info中选择*,其中find_in_set('admin',groups);
见这里:http://sqlfiddle.com/#!9/97c4b/1
<强> BUT 强>
你不应该使用你的表格结构。如果你可以改变它,改变它!规范化您的架构,您将遇到更少的问题和更好的性能!
在您的情况下,您应该使用这样的架构
create table users (
id int primary key auto_increment,
username varchar(255))
;
insert into users (id, username) values (1, 'ABC@mail.com');
create table groups (
id int primary key auto_increment,
name varchar(255)
);
insert into groups (id, name) values (1, 'superadmin');
insert into groups (id, name) values (2, 'admin');
create table user_groups (
user_id int,
group_id int
);
insert into user_groups (user_id, group_id) values (1,1);
insert into user_groups (user_id, group_id) values (1,2);
然后你可以选择
select * from users u
join user_groups ug on (ug.user_id = u.id)
join groups g on (ug.group_id = g.groupid)
where g.name = 'admin';
答案 1 :(得分:0)
select *
from user_info
where find_in_set('admin', groups);
实际上,这是一个围绕着根本破坏的设计的拐杖。