关于循环获取会员关系图(下线及下下线)的问题,

vipstar 2010-08-10 08:31:38
数据库结构如下:
-- 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', 'a@a.com', '', 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', 'seller@ecmall.com', '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', 'buyer@ecmall.com', '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', 'su@a.com', '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', 'sunjianyin@126.com', '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', 'a@aaa.com', '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', 'a@a.com', '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', 'a@a.com', '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', 'a@a.com', '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', 's@a.com', '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 却显示不出来,


我最终想实现的如这个图的意思



盼指教,谢谢
...全文
84 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vipstar 2010-08-10
谢谢楼上几位的指点,已成功实现了,
回复
xuzuning 2010-08-10
你现在的代码有问题哦
。。。
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
回复
Dleno 2010-08-10
要实现你的效果,最好把你的数据结构稍微改一改。
不然最终实现了,却是要查询无数次!
其实一次查询就够了,剩下的就可以交给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);

回复
vipstar 2010-08-10
谢谢5楼您的回复,不过不太明白,研究中。。
回复
fancyivan 2010-08-10
简单的做法是,递归。

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
回复
vipstar 2010-08-10
[Quote=引用 2 楼 fancyivan 的回复:]
字段f1代表的是它的上级的ID号?
[/Quote]

对,是这样的,F1代表的是上级的user_id
回复
vipstar 2010-08-10
呵呵 当然不是。一个商城而已。
回复
fancyivan 2010-08-10
字段f1代表的是它的上级的ID号?
回复
fancyivan 2010-08-10
传销中的技术核心人员? 呵呵,开玩笑
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告