数据库结构如下:
-- phpMyAdmin SQL Dump
-- version 2.7.0-pl1
-- http://www.phpmyadmin.net
-- 
-- 主机: localhost
-- 生成日期: 2010 年 08 月 10 日 00:06
-- 服务器版本: 5.0.81
-- PHP 版本: 5.2.3
-- 
-- 数据库: `a0527232048`
-- -- ---------------------------------------------------------- 
-- 表的结构 `ecm_member`
-- CREATE TABLE `ecm_member` (
  `user_id` int(10) unsigned NOT NULL auto_increment,
  `user_name` varchar(60) NOT NULL default '',
  `email` varchar(60) NOT NULL default '',
  `password` varchar(32) NOT NULL default '',
  `real_name` varchar(60) default NULL,
  `gender` tinyint(3) unsigned NOT NULL default '0',
  `birthday` date default NULL,
  `phone_tel` varchar(60) default NULL,
  `phone_mob` varchar(60) default NULL,
  `im_qq` varchar(60) default NULL,
  `im_msn` varchar(60) default NULL,
  `im_skype` varchar(60) default NULL,
  `im_yahoo` varchar(60) default NULL,
  `im_aliww` varchar(60) default NULL,
  `reg_time` int(10) unsigned default '0',
  `last_login` int(10) unsigned default NULL,
  `last_ip` varchar(15) default NULL,
  `logins` int(10) unsigned NOT NULL default '0',
  `ugrade` tinyint(3) unsigned NOT NULL default '0',
  `portrait` varchar(255) default NULL,
  `outer_id` int(10) unsigned NOT NULL default '0',
  `activation` varchar(60) default NULL,
  `feed_config` text NOT NULL,
  `f1` int(11) default NULL,
  `f2` int(11) default NULL,
  `f1name` varchar(50) default NULL,
  `f3` varchar(50) default NULL,
  `f2name` varchar(50) default NULL,
  `bank` varchar(50) NOT NULL,
  `bankname` varchar(50) NOT NULL,
  `bankid` varchar(50) NOT NULL,
  PRIMARY KEY  (`user_id`),
  KEY `user_name` (`user_name`),
  KEY `email` (`email`),
  KEY `outer_id` (`outer_id`)
) ENGINE=MyISAM AUTO_INCREMENT=96 DEFAULT CHARSET=gbk AUTO_INCREMENT=96 ;-- 
-- 导出表中的数据 `ecm_member`
-- INSERT INTO `ecm_member` VALUES (2, 'admin', '[email protected]', '', NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1275093978, 1281284329, '123.180.227.156', 160, 0, NULL, 0, NULL, '', NULL, NULL, NULL, NULL, NULL, '', '', '');
INSERT INTO `ecm_member` VALUES (3, 'seller', '[email protected]', '94804b00ff7e7223f4e3001c3833b1e4', '超级卖家', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1275065257, NULL, NULL, 0, 0, NULL, 0, NULL, '', NULL, NULL, NULL, NULL, NULL, '', '', '');
INSERT INTO `ecm_member` VALUES (4, 'buyer', '[email protected]', 'bc5b291c185b468eaa30932b6652e6b9', '超级买家', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1275065257, NULL, NULL, 0, 0, NULL, 0, NULL, '', NULL, NULL, NULL, NULL, NULL, '', '', '');
INSERT INTO `ecm_member` VALUES (5, 'guanli', '[email protected]', '1b6905cb28247f28ae52ff56a16124c5', NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1275153358, 1275154486, '123.180.232.222', 5, 0, NULL, 0, NULL, '', NULL, NULL, NULL, NULL, NULL, '', '', '');
INSERT INTO `ecm_member` VALUES (6, 'vipstar', '[email protected]', 'c0ec519a6f905e387a9c2c77581c10be', NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1275155071, 1280021283, '123.180.244.233', 29, 0, NULL, 0, 'c29d8949f2a4cbab58e35b0bf5debb24', '', 2, NULL, NULL, NULL, NULL, '', '', '');
INSERT INTO `ecm_member` VALUES (61, 'sunjianyin', '[email protected]', 'bfe5f737d317a727547aea1654b49304', '孙先生', 0, '0000-00-00', NULL, NULL, '', '', NULL, NULL, NULL, 1279145780, 1281284254, '123.180.227.156', 46, 0, NULL, 0, NULL, '', 6, 2, 'vipstar', NULL, 'admin', '中国工商银行', '中国工商银行胜利支行', '9558800407110888888');
INSERT INTO `ecm_member` VALUES (93, 'sunjianyin3', '[email protected]', '0888ac64cfb2e33d259a756902e03595', NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1279844699, 1279844699, '123.180.244.233', 1, 0, NULL, 0, NULL, '', 92, 6, 'sunjianyin2', NULL, 'vipstar', '', '', '');
INSERT INTO `ecm_member` VALUES (92, 'sunjianyin2', '[email protected]', '27c237be1c64d6da37fd74672cf293d5', NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1279844033, 1280450866, '123.180.253.14', 3, 0, NULL, 0, NULL, '', 6, 2, 'vipstar', NULL, 'admin', '', '', '');
INSERT INTO `ecm_member` VALUES (94, 'sunjianyin81', '[email protected]', '068e10a2ad8b0a907a4f1075f33dadba', NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1280640545, 1280640751, '123.180.227.156', 2, 0, NULL, 0, NULL, '', 61, 6, 'sunjianyin', NULL, 'vipstar', '', '', '');
INSERT INTO `ecm_member` VALUES (95, 'vipstar89', '[email protected]', '1e424e8d2c057ee1dbd4b5c89c6f52a2', NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1281333815, 1281333815, '123.180.227.156', 1, 0, NULL, 0, NULL, '', 2, 0, 'admin', NULL, '', '', '', '');
我写的一段简单的SQL代码如下:$conzdy = mysql_connect("localhost","a0527232048","111"); mysql_select_db("a0527232048",$conzdy);
$sql1="select * from ecm_member ";
mysql_query("set names 'gbk'");
$jlj=mysql_query($sql1,$conzdy);
while($row=mysql_fetch_array($jlj))
{
          echo "<div style=\"border:1px #039 dotted;margin-top:10px;\">";
  $id=$row[0];
  $username1=$row[1];//会员名
                             echo $username1."<br>";
          $sql2="select * from ecm_member where f1= ".$id."";       
      $jlj2=mysql_query($sql2,$conzdy);
      while($unrow=mysql_fetch_array($jlj2))
            {
            $ff1= $unrow[0];
   $uname2=$unrow[1];//下线会员名
            echo $uname2;
             echo "<br>";
             $sql3="select * from ecm_member where f1= ".$ff1.""; 
                        $jlj2=mysql_query($sql3,$conzdy);
                    while($unrow=mysql_fetch_array($jlj2))
                     {
                   $ff2= $unrow[0]." ";
 $uname2=$unrow[1]." ";//下下线会员名
                   echo $uname2;
                      }
            }
echo "</div>";
}现在的问题是,只能调出一个下线会员,但下下线的会员可以全部调出。
php代码结果见 http://shop2.78123.conn.in/test/26.php其中 admin还有一个下线会员 sunjianyin89 却显示不出来,
我最终想实现的如这个图的意思盼指教,谢谢

解决方案 »

  1.   

    字段f1代表的是它的上级的ID号?
      

  2.   


    对,是这样的,F1代表的是上级的user_id
      

  3.   

    简单的做法是,递归。void core(int fid)
    {
       $sql="select id, name from table where fid=".fid;
       $res = mysql_query(sql);
       if(!$res)
      {
        return;
       }
        for each ($res)
       {
           echo $res['id'].':'.$res['name'];
           core($res['fid']);
        }
    }
    调用core(2);  //2是整个树的根ID,就是大boss的ID
      

  4.   

    要实现你的效果,最好把你的数据结构稍微改一改。
    不然最终实现了,却是要查询无数次!
    其实一次查询就够了,剩下的就可以交给php数组做下处理。如:
    CREATE TABLE IF NOT EXISTS `class` (
      `cid` bigint(12) unsigned NOT NULL AUTO_INCREMENT COMMENT '分类ID',
      `pid` bigint(12) NOT NULL DEFAULT '0' COMMENT '所属上级分类ID',
      `cname` varchar(50) CHARACTER SET utf8 NOT NULL COMMENT '分类名称',
      `orderid` int(8) NOT NULL DEFAULT '0' COMMENT '分类排序',
      `path` varchar(200) CHARACTER SET utf8 NOT NULL COMMENT '分类顺序级别的ID路径',
      `levl` int(8) NOT NULL DEFAULT '1' COMMENT '分类级别',
      PRIMARY KEY (`cid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;--
    -- 转存表中的数据 `class`
    --INSERT INTO `class` (`cid`, `pid`, `cname`, `orderid`, `path`, `levl`) VALUES
    (1, 0, '亚洲', 1, '1', 1),
    (2, 1, '中国', 1, '1,2', 2),
    (3, 2, '四川', 1, '1,2,3', 3),
    (16, 0, '非洲', 3, '16', 1),
    (6, 0, '欧洲', 2, '6', 1),
    (7, 1, '韩国', 2, '1,7', 2),
    (8, 1, '日本', 3, '1,8', 2),
    (9, 1, '泰国', 4, '1,9', 2),
    (10, 2, '山东', 2, '1,2,10', 3),
    (11, 2, '湖南', 3, '1,2,11', 3),
    (12, 2, '海南', 4, '1,2,12', 3),
    (13, 2, '上海', 5, '1,2,13', 3),
    (14, 2, '北京', 6, '1,2,14', 3),
    (17, 0, '美洲', 4, '17', 1),
    (18, 0, '大洋洲', 5, '18', 1),
    (20, 7, '汉城', 1, '1,7,20', 3),
    (21, 8, '东京', 1, '1,8,21', 3),
    (22, 8, '富士山', 2, '1,8,22', 3),
    (23, 8, '大坂', 3, '1,8,23', 3),
    (24, 2, '香港', 7, '1,2,24', 3),
    (96, 6, '荷兰', 1, '6,96', 2),
    (99, 6, '德国', 4, '6,99', 2),
    (100, 6, '罗马', 5, '6,100', 2),
    (29, 2, '黑龙江', 8, '1,2,29', 3),
    (97, 6, '芬兰', 2, '6,97', 2),
    (102, 6, '意大利', 7, '6,102', 2),
    (101, 6, '卢森堡', 6, '6,101', 2),
    (98, 6, '瑞士', 3, '6,98', 2);
      

  5.   

    你现在的代码有问题哦

                 while($unrow=mysql_fetch_array($jlj2))
                        {
                            $ff1= $unrow[0];
                       $uname2=$unrow[1];//下线会员名
                            echo $uname2;
                            echo "<br>";
                            $sql3="select * from ecm_member where f1= ".$ff1.""; 
                            $jlj2=mysql_query($sql3,$conzdy);
                               while($unrow=mysql_fetch_array($jlj2))
                                 {
                                   $ff2= $unrow[0]." ";
                         $uname2=$unrow[1]." ";//下下线会员名
    。$jlj2 被重复使用了,也就是说一旦进入 “下下线” “下线” 就没有了
    那你的变量命名规律,后两个 $jlj2 应为 $jlj3