Re: [問題] 關於變動數量的資料要放進Access

看板Database作者 (寶貝豬)時間17年前 (2009/04/12 10:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
不管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
文章代碼(AID): #19uLNi62 (Database)
文章代碼(AID): #19uLNi62 (Database)