2015-06-04 76 views
0

我想從user_info表中獲取所有admin用戶。在user_info表中,組列存在多值屬性。我已經試過是:如何在SQL中獲取MultiValued屬性

select * from user_info where 'admin' IN Split(',',groups); 

我得到這個錯誤:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Split(',',groups)

user_info表中

username  | groups   | 
--------------------------------- 
[email protected] | superadmin,admin 

組表

groupID(AutoIncr)  | groups   | 
--------------------------------- 
1      | superadmin  | 
2      | admin   | 
+1

老逗號分隔的項目的問題......我對不起,但那隻會導致你很多問題。 – jarlh

回答

0

你可以嘗試:

select * 
    from user_info 
    where find_in_set('admin', groups); 

真壽,即圍繞一個根本破設計柺杖。

1

您的解決方案,這是一個工作查詢

SELECT * FROM user_info的地方FIND_IN_SET( '管理員',團體);

在這裏看到:http://sqlfiddle.com/#!9/97c4b/1

您should'nt與表結構。如果你可以改變它,改變它!規範你的模式,你將會有更少的問題和更好的性能!

在你的情況,你應該使用這樣

create table users (
    id int primary key auto_increment, 
    username varchar(255)) 
    ; 

    insert into users (id, username) values (1, '[email protected]'); 

    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'; 

在這裏看到:http://sqlfiddle.com/#!9/b82fa/2