• 締切済み

SQLデータに紹介者と紹介者コードの関連付けをしたい

どういう形で組むのがいいのか分からずご回答頂ける親切な方がいたら教えて下さい。 現在MySQLデータに 自分用コードーid 紹介者用コードsid の様にデータが入っています。 イメージとすると 1 ABCさん スペース(紹介者なし) 2 BCDさん スペース(紹介者なし) 3 EFGさん 1 4 HGFさん 2 5 UIUDさん 3 みたいな形でデータがかなりのデータがあり紹介者が増えれば増える程 どういう形でプログラムを組めばいいのか分からなくなってきました。 状態としては ()内は紹介者人数になります メイン登録(2)  1のABCさん(1)   3のEFGさん(1)    5のUIUDさん  2のBCDさん(1)   4のHGFさん みたいに表示したいと思っています。 件数は多いのでどういう風に組めばすっきりするのか・・ それも検討がつきません・・ 何かいいプログラミング方法があれば教えて頂きたく思いご質問させて頂きました。 もしいい手があるという方がいましたらご教授お願い致します。

みんなの回答

  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

希望の結果を得るためには再帰的なプログラムを組むのがすっきりするでしょう。 サンプルは下記 前提  DB下記フィールドが同一テーブル上に大量にあるとする ・id 自分用コード ・name 自分の名前 ・sid 紹介者用コード 前処理は省略 $query="SELECT * FROM テーブル名 など $result = mysql_query($query); // 整理しやすいように配列を生成 $x=array(); while($rs = mysql_fetch_assoc($result)) { $tmp['id']=$rs['id']; $tmp['name']=$rs['name']; $tmp['sid']=($rs['sid']>0)?$rs['sid']:0; $x[$rs['sid']][]=$tmp; } $ans="メイン登録(".(count($x[0])).")\n"; getchild(0,''); // ここで一気に生成します echo $ans; //結果表示 exit; // おしまい function getchild($id,$sp){ global $ans,$x; $sp.=" "; if (count($x[$id])<1) return; foreach($x[$id] as $val){ $ans.=$sp.$val['id']."の".$val['name']."さん(".(count($x[$val['id']])).")\n"; getchild($val['id'],$sp); } } ?>

kofu
質問者

お礼

一部修正のみでほぼ完璧にこれで動きました。 ありがとう御座いました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ツリー構造になりますのでデータ構造としてはそれほど複雑ではないでしょう。 SQLで、自分が親で子供をLEFT JOINしてやればいいようなきがします。

kofu
質問者

お礼

イマイチ分からないので今後の勉強課題とさせて頂きます。 ありがとう御座いました。

関連するQ&A