Database 板


LINE

不管10人或几百几千人, 增设一个parent_id的栏位就行了. ex: Create Table: CREATE TABLE `members` ( `id` int(11) NOT NULL, `parent_id` int(11) default NULL, `name` varchar(5) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; insert into members values(1,0,'A'); insert into members values(2,1,'B'); insert into members values(3,1,'C'); insert into members values(4,2,'D'); insert into members values(5,3,'E'); 他们的关系: A<-+-B<-+-D | +-C<-+-E 资料库定义好後, 接着就是写程式码进行读取. 以下的程式码已用php5测试过, 可以正确运作. 若有疑问, 欢迎讨论, 若无疑问, 欢迎自行改成符合自己需要的. <? class members{ //1.捞出指定目标: function read($name){ $link=$this->db_conn(); $sql=" select m.* from members as m where m.name='$name'; "; $rs=mysql_query($sql,$link); $r=mysql_fetch_assoc($rs); return $r; } //2.当要捞出某人其父节点资料时: function read_parent($name){ $link=$this->db_conn(); $sql=" select mp.* from members as m left join members as mp on m.parent_id=mp.id where m.name='$name'; "; $rs=mysql_query($sql,$link); $r=mysql_fetch_assoc($rs); return $r; } //3.当要捞出某人的所有直属子节点(只有第一层, 不含第二层以下)资料时: function read_childs($name){ $link=$this->db_conn(); $sql=" select mch.* from members as mch left join members as m on m.id=mch.parent_id where m.name='$name'; "; $list=array(); $rs=mysql_query($sql,$link); while($r=mysql_fetch_assoc($rs)){ $list[]=$r; } return $list; } //4.当要捞某人的所有子孙时, 需要用递回程式控制: function &cascade_list($name){ //注意本函式会传回一个array的reference //1.捞出自己 $me=$this->read($name); //2.捞出childs $childs = $this->read_childs($name); //3.对於每一个child, 捞出其childs foreach($childs as &$child){ //注意$child前的'&': 用reference存取$child $me['childs'][] = $this->cascade_list($child['name']); } return $me; } //资料库连线 function &db_conn(){ $link=mysql_connect('localhost','login','passwd'); //帐密自订 mysql_select_db('mm'); return $link; } }//end of class members //捞出来後, 可用print_r函式或var_dump函式观看其结构. 进一步就看如 //何应用. //测试跑出来的结果是否符合预期: $m=new members; print_r($m->cascade_list('A')); ?> ex: 其结构是: Array ( [id] => 1 [parent_id] => 0 [name] => A [childs] => Array ( [0] => Array ( [id] => 2 [parent_id] => 1 [name] => B [childs] => Array ( [0] => Array ( [id] => 4 [parent_id] => 2 [name] => D ) ) ) [1] => Array ( [id] => 3 [parent_id] => 1 [name] => C [childs] => Array ( [0] => Array ( [id] => 5 [parent_id] => 3 [name] => E ) ) ) ) ) ※ 引述《IamCoolKing (我是冷王!!!)》之铭言: : 大家好, 我问一个笨问题 (我是用Access) : 假如有两个table, member table 跟 member dependents table : member table 有一个或多个栏位是要储存跟此会员相关的人物 : 也就是说 跟会员A 有关系的人有 A1~A10 这十个人 : 那我在设计栏位时, 要用 十个栏位来表示 A1~A10 吗? : 或者有更好的设计方式? (有类似阵列的方式吗? : 万一有关系的人有超过10个人的话, 要怎麽做比较恰当呢? : 谢谢回答 ^^" --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.186.206







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP