sw030122 2009-05-23 11:46 采纳率: 100%
浏览 209
已采纳

提问下数据库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


它应该读出下面那两条才对的。谁能看看。给我正确做法。

  • 写回答

1条回答 默认 最新

  • iteye_14985 2009-05-23 14:48
    关注

    首先把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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 centos7.9升级python3.0的问题
  • ¥15 如何解决调试dev-出++5.11不成功问题
  • ¥15 安装CentOS6时卡住
  • ¥20 关于#监控系统#的问题,如何解决?(相关搜索:系统软件)
  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?