提问下数据库mysql的一个问题

--权限表有四条记录
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