函数func_parent_menu(menu_id)是返回指定菜单所有上级菜单字符串('1,2,3'), 下面这个语句是查询菜单400002所有上级菜单的结果集:
select * from r_menu where FIND_IN_SET(menu_id, func_parent_menu(400002));有个问题请教,下面是我想合并菜单400001,400002, 400003所有上级菜单结果集:
select * from r_menu where FIND_IN_SET(menu_id, func_parent_menu(400001)) union
select * from r_menu where FIND_IN_SET(menu_id, func_parent_menu(400002)) union
select * from r_menu where FIND_IN_SET(menu_id, func_parent_menu(400003));现在400001,400002, 400003 ... 有很多个, 来自一个select查询, 要实现该功能要怎么写?

解决方案 »

  1.   

    咳咳,我看了你发的提问了。
    像这样发比较好:◆ 粘贴出表r_menu 的结构。
    ◆ 粘贴一段要得到的数据示例格式。你说的那个“上级菜单字符串”真的不知道是什么啊。。menu_id 是怎么存的。
      

  2.   

    CREATE TABLE `r_menu` (
      `menu_id` int(11) NOT NULL auto_increment COMMENT '菜单id',
      `menu_name` varchar(50) collate utf8_unicode_ci NOT NULL COMMENT '菜单名称',
      `parent_menu_id` int(11) NOT NULL COMMENT '上级菜单id',
      `re` varchar(200) collate utf8_unicode_ci default NULL COMMENT '备注',
      PRIMARY KEY  (`menu_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=400003 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    menu_id int 11 0 0 -1 0 0 0 0 菜单id -1 0
    menu_name varchar 50 0 0 0 0 0 0 0 菜单名称 utf8 utf8_unicode_ci 0 0
    parent_menu_id int 11 0 0 0 0 0 0 0 上级菜单id 0 0
    re varchar 200 0 -1 0 0 0 0 0 备注 utf8 utf8_unicode_ci 0 0
      

  3.   

    所有的啊。 
    假如他的上级的上级的上级,还有上级,而且即使不是无限级别的而是上百级别的深度的呢?
    为什么会有这样的需求的哦??
    SELECT f.* FROM r_menu s
    RIGHT JOIN r_menu f ON s.parent_menu_id=f.menu_id AND f.parent_menu_id=0
    WHERE s.menu_id IN (400001,400002,400003)
      

  4.   

    MySQL中进行树状所有子节点的查询
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx