用SQL怎样实现上级领导可看到下级员工的记住信息
即:
N条记录如果当前登录用户是记录创建者的上级领导(上级.上上级...也可以看见)则显示在列表中

解决方案 »

  1.   

    这个,不知道有没有特别好的办法我以前类似业务是,将全部的上下级关系缓存了【总人员1500以内】。对每个登录用户来说,找出所有下级id,然后in(id1, id2, id3)……
      

  2.   

    看你的级别表是乍样设计的了,如果是 id fid value 这个无限级别的,可以用递归来找出 所有父类或者所有子类的级别。
      

  3.   

    为了节约系统效率,这种在数据设计的时候就要多两个字段。
    path路径,level级别,大概数据结构如下。
    这样无论是查询下级还是上级,都只需要一条语句,而无须递归!!CREATE TABLE IF NOT EXISTS `lc_content_news_class` (
      `cid` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
      `pid` bigint(12) NOT NULL DEFAULT '0',
      `cname` varchar(50) CHARACTER SET utf8 NOT NULL,
      `path` varchar(200) CHARACTER SET utf8 NOT NULL,
      `levl` int(8) NOT NULL DEFAULT '1',
      PRIMARY KEY (`cid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=94 ;--
    -- 转存表中的数据 `lc_content_news_class`
    --INSERT INTO `lc_content_news_class` (`cid`, `pid`, `cname`, `path`, `levl`) VALUES
    (1, 0, '亚洲', '1', 1),
    (2, 1, '中国', '1,2', 2),
    (3, 2, '四川', '1,2,3', 3),
    (16, 0, '非洲', '16', 1),
    (6, 0, '欧洲', '6', 1),
    (7, 1, '韩国', '1,7', 2),
    (8, 1, '日本', '1,8', 2),
    (9, 1, '泰国', '1,9', 2),
    (10, 2, '山东', '1,2,10', 3),
    (11, 2, '湖南', '1,2,11', 3),
    (12, 2, '海南', '1,2,12', 3),
    (13, 2, '上海', '1,2,13', 3),
    (14, 2, '北京', '1,2,14', 3),
    (17, 0, '美洲', '17', 1),
    (18, 0, '大洋洲', '18', 1),
    (20, 7, '汉城', '1,7,20', 3),
    (21, 8, '东京', '1,8,21', 3),
    (22, 8, '富士山', '1,8,22', 3),
    (23, 8, '大坂', '1,8,23', 3),
    (24, 2, '香港', '1,2,24', 3),
    (44, 37, '比利时', '6,37,44', 3),
    (39, 36, '冰岛', '6,36,39', 3),
    (37, 6, '西欧', '6,37', 2),
    (27, 26, '巴黎', '1,26,27', 3),
    (29, 2, '黑龙江', '1,2,29', 3),
    (41, 36, '芬兰', '6,36,41', 3),
    (40, 36, '丹麦', '6,36,40', 3),
    (36, 6, '北欧', '6,36', 2),
    (42, 36, '挪威', '6,36,42', 3),
    (43, 36, '瑞典', '6,36,43', 3),
    (45, 44, '安特卫普', '6,37,44,45', 4),
    (46, 44, '布鲁日', '6,37,44,46', 4),
    (47, 44, '布鲁塞尔', '6,37,44,47', 4),
    (48, 37, '荷兰', '6,37,48', 3),
    (49, 48, '阿姆斯特丹', '6,37,48,49', 4),
    (50, 48, '海牙', '6,37,48,50', 4),
    (51, 48, '鹿特丹', '6,37,48,51', 4),
    (52, 48, '乌特勒支', '6,37,48,52', 4),
    (53, 37, '英国', '6,37,53', 3),
    (54, 53, '巴斯', '6,37,53,54', 4),
    (55, 53, '伯明翰', '6,37,53,55', 4),
    (56, 53, '布莱顿', '6,37,53,56', 4),
    (57, 53, '布里斯多', '6,37,53,57', 4),
    (58, 53, '剑桥', '6,37,53,58', 4),
    (59, 53, '卡迪夫', '6,37,53,59', 4),
    (60, 53, '切斯特', '6,37,53,60', 4),
    (61, 53, '爱丁堡', '6,37,53,61', 4),
    (62, 53, '格拉斯哥', '6,37,53,62', 4),
    (63, 53, '湖区', '6,37,53,63', 4),
    (64, 53, '列兹', '6,37,53,64', 4),
    (65, 53, '利物浦', '6,37,53,65', 4),
    (66, 53, '伦敦', '6,37,53,66', 4),
    (67, 53, '曼彻斯特', '6,37,53,67', 4),
    (68, 53, '纽卡斯尔', '6,37,53,68', 4),
    (69, 53, '诺丁汉', '6,37,53,69', 4),
    (70, 53, '牛津', '6,37,53,70', 4),
    (71, 53, '约克', '6,37,53,71', 4),
    (72, 37, '奥地利', '6,37,72', 3),
    (73, 37, '波兰', '6,37,73', 3),
    (74, 37, '德国', '6,37,74', 3),
    (75, 37, '法国', '6,37,75', 3),
    (76, 37, '捷克', '6,37,76', 3),
    (77, 37, '葡萄牙', '6,37,77', 3),
    (78, 37, '瑞士', '6,37,78', 3),
    (79, 37, '斯洛伐克', '6,37,79', 3),
    (80, 37, '西班牙', '6,37,80', 3),
    (81, 37, '希腊', '6,37,81', 3),
    (82, 37, '匈牙利', '6,37,82', 3),
    (83, 37, '意大利', '6,37,83', 3),
    (84, 37, '英国', '6,37,84', 3),
    (85, 72, '布尔根兰州', '6,37,72,85', 4),
    (86, 72, '蒂罗尔州', '6,37,72,86', 4),
    (87, 72, '福拉尔贝格州', '6,37,72,87', 4),
    (88, 72, '凯恩藤州', '6,37,72,88', 4),
    (89, 72, '萨尔茨堡州', '6,37,72,89', 4),
    (90, 72, '施泰尔马克州', '6,37,72,90', 4),
    (91, 72, '下奥地利州', '6,37,72,91', 4),
    (92, 72, '上奥地利州', '6,37,72,92', 4),
    (93, 72, '维也纳州', '6,37,72,93', 4);
      

  4.   

    uid流水号   level级别编号
    uid  level
    1    1
    2    2
    3    3
    4    4如果 是2级别的领导queryselect uid,level from Table where level > 2
    result:
    3   3
    4   4
    对应下层3级别和4级别