--权限表有四条记录
tb_purview
id title addtime
1 添加新闻 2009-05-20
2 添加公告 2009-05-21
3 审核新闻 2009-05-22
4 审核会员 2009-05-23
--角色表有两条记录
tb_role
id title detail addtime
1 录入员 1,2 2009-05-22
2 审核员 3,4 2009-05-23
现在我要查出审核人员都有什么权限
select title from tb_purview where id in (select id from tb_role where id=2);
这样的语名只能读出
3 审核新闻 2009-05-22
它应该读出下面那两条才对的。谁能看看。给我正确做法。
首先把detail的属性改成这样:
tb_role
id title detail addtime
1 录入员 1,2, 2009-05-22
2 审核员 3,4, 2009-05-23
然后SQL这样写:
SELECT tb_purview.title FROM tb_role, tb_purview WHERE tb_role.id=2 AND POSITION(CONCAT(tb_purview.id,',') in detail)
如果你的权限数量只有1-9等,不同是存在1,11,2,22这样的id, 则原来的tb_role表detail字段可以不加逗号,SQL可以化简成:
SELECT tb_purview.title FROM tb_role, tb_purview WHERE tb_role.id=2 AND POSITION (tb_purview.id in detail)
另外,建议把detail分拆成第三个表,可能会好用些。如
tb_role
id title addtime
1 录入员 2009-05-22
2 审核员 2009-05-23
tb_role_purview
id roleid detail
1 1 1
2 1 2
3 2 3
4 2 4