2011年10月1期WebProgphpのツリーのアルゴリズムがわかんねんんだよ! TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
【企画】CGIでRPGつくーる
■WEBプログラマ交流すれ■
webftpについておしえてくれぇ!!
PerlだけでDBを構築する


phpのツリーのアルゴリズムがわかんねんんだよ!


1 :02/03/10 〜 最終レス :11/11/21
教えてください(´Д`;)
mysql使って普通の掲示板は組めたんですがそれにレスできる
こんな感じ↓
コメント1
コメント1
コメント1に対するレス
コメント1
簡単なサンプルで解説してください
本スレで教えてもらったけど何度が高すぎました。。
>>2
掲示板ソース、コレにコメント付けれるように直すにはどうすれば
いいんでしょうか?

2 :
エラー処理は省いてます
<?php
$db=mysql_connect("localhost","***",***);
mysql_select_db(bbs);
if($name&&$msg)
{
$msg=ereg_replace("\r\n|\r|\n","<BR>\n","$msg");
mysql_query("insert into bbs values(now(),'$name','$msg')");
}
$hoge="select * from bbs order by time desc";
$sql=mysql_query($hoge);
while($array=mysql_fetch_array($sql))
{
print("投稿者:$array[name]  投稿時刻:$array[time]<BR>");
print("<BR>$array[msg]<HR>");
}

3 :
DB構造
時間
名前
本文


知ってる方がおられたら伝授してください

4 :
自分なりに調べたところユニークなID持たせるっていいますよねぇ
ぶっちゃけどうやってID持たせるの?(゜q゜)ボケー
って感じでわけわかんないんです(;;)

5 :
auto_increment。

6 :
>>5
というと?
その型が関係してるのとかまでは探れたんですが、、
後がまったくなんです、、、(;;)
それをどう利用したらいいんでしょうか?

7 :
全文載せてみて

8 :
「ん」がひとつ多い

9 :
ツリーっつーのはさ、再帰だよ。サイキっく

10 :
シーケンスわかんねぇなら発言毎に
インクリメントしてしまっとけば。

11 :
みなさんおはようございます!!!!!!!!!!!!

>>7
ソースのエラー処理もでしょうか?
>>8
日本語の問題?
>>8
その再帰するまではわかったんですが、どうやって再帰するのか
想像できないんですよ、サンプルみしてください(;;)
>>10
インクリメント自体はできるのですが、、それをどう利用するんですか?

12 :
的外れならスマソ
ツリー番号をつける。これにはシーケンス使ったりシーケンス知らない場合
はインクリメントとかで対処しろ。
このツリー番号を元に、返信なら同じツリー番号、新規発言なら新しい番号
を付与。
記事を表示する場合は同じツリー番号の集団を表示すればよい。

13 :
カキコした順に通し番号を1から振っていく。それがそのカキコについた名前。
レスをつけたいときにはその名前で指名する。
表示するときは指名されたものをうしろにくっつける。

14 :
>>12
>>13
とりあえずこれ作ってみたんです、番号が1upしれくやつ
これで bbs.php?msgno=[ここに選択NO]にアクセスしてみても反応無しなんです
これに反応でるようにするにはどうするんでしょうか?
まずここからでいいのかな・・・?
ドキドキ
<?php
//DB構造
//msgno これint primary key auto_increment,
//datetime
//name
//msg
$db=mysql_connect("localhost","hodaka",124);
mysql_select_db(tree);
if($name&&$msg)
{
$msg=ereg_replace("\r\n|\r|\n","<BR>\n","$msg");
mysql_query("insert into tree(datetime,name,msg) values(now(),'$name','$msg')");
}
$hoge="select * from tree order by msgno desc";
$sql=mysql_query($hoge);
while($array=mysql_fetch_array($sql))
{
print("投稿番号:$array[msgno]");
print("投稿者:$array[name]  投稿時刻:$array[datetime]<BR>");
print("<BR>$array[msg]<HR>");
}
?>
</BODY>
</HTML>

15 :
>>14
なぜ皆mysql_query()のエラーチェックをしないのかと小一時間……(以下略)

16 :
>>15
普段は付けてるけど、エラー処理入れると
ここに書き込めないので省いたんです、、
それよりそれより、、ソワソワ

17 :
ID,親記事ID,ツリーID
これくらい用意しろ
関数化しねぇと再帰できないぞ。再起不能

18 :
>>17
とりあえずそれ組んでみます
ありがとうございます。

19 :
メッセージID(自分ID)と親IDだけあればいいんでないの?

20 :
>>19
とりあえずDBでoyaidとtreeid作りました(msgnoは最初からある)
今日は寝るので明日指導してくだちゃい。おやすみなさい、、

21 :
>>19
禿同。単なる有向グラフと思われ。

22 :
treeID作りました!型はintですがいいんでしょうか?
これをレス型にするにはどうすれば・・?
レス型に書き直してください(;;)
<?php
$db=mysql_connect("localhost","*****",****);
mysql_select_db(tree);
if($name&&$msg)
{
$msg=ereg_replace("\r\n|\r|\n","<BR>\n","$msg");
mysql_query("insert into tree(datetime,name,msg) values(now(),'$name','$msg')");
}
$hoge="select * from tree order by msgno desc";
$sql=mysql_query($hoge);
while($array=mysql_fetch_array($sql))
{
$msgno=$array[msgno];
print("投稿番号$msgno<BR>");
print("投稿者:$array[name]  投稿時刻:$array[datetime]<BR>");
print("<BR>$array[msg]<HR>");
}
?>
</BODY>
</HTML>

23 :
「レスをする」ということで、レスをするツリーIDを渡す

24 :
>>23
というと?それは具体的に何をするんでしょうか?
あたいの脳がその部分だけかけていて考えられないのです!
サンプル組んでください!

25 :
人に教えるのって面倒だな・・・

26 :
サンプル組むってほどのものかよ。。。
セッションでツリーID渡すかINPUTタグのHIDDENで仕込んどけ

27 :
そろそろ放置かな。

28 :
だから親のIDを持っとくんだってばさ
mysql_query("insert into tree(datetime, name, msg, refid) values(now(),'$name', '$msg', '$oyaIDne')");
あとは再帰でツリーは描けるから。

29 :
PHP4サンプル集 秀和システム 著 山田祥寛
ここにそのまま載ってるぞ
よって
===============終了===============

30 :
>>29
買ってきます!
あと最後にこれ教えてください、自分でソース読んだけどしくみが
わからん、ツリーはわかったけどこれができなきゃね♪
質問スレでも聞いたけど、マルチじゃないよ
http://www.dcl.info.waseda.ac.jp/~hasegawa/php/bbs.html
ここのスクリプトで
http://www.dcl.info.waseda.ac.jp/~hasegawa/php/source/bbs1/bbs1.php
これのレスの中身を見るときprint_numbe
使ってますけどこれどういう仕組みなんでしょうか?
これ最後で!タノンます(´д`)
トリップも公開します!#ore

31 :
根気のいい俺でもそろそろ限界か?
リンクに貼ってあるprint_numberっていうパラメータのこと聞いてるんだよ
ね?
君は基本的にCGIを1から勉強した方が良いかと思われ。
>>29で紹介した本を買って、その他いろんなドキュメントを読んでみれ。

32 :
ついでに
再帰もほどほどの件数にしとかないとメモリ食うからね。

33 :
>>30
http://www.dcl.info.waseda.ac.jp/~hasegawa/php/source/bbs1/bbs1.php?print_number=1
って言うふうに使うのだと思われ

34 :
>>30
ごめん、間違えた(汗)
http://www.dcl.info.waseda.ac.jp/~hasegawa/php/source/bbs1/bbs1.phps
http://www.dcl.info.waseda.ac.jp/~hasegawa/php/source/bbs1/show_contents1.phps
この辺見れ。EUCだけどナー

35 :
>>34
(゚д゚)ハッ!良く見直してみたらわかった!
ツリーの仕方もログ読み直してわかった!
ありがとうございます!!!1111!!!
しばらくがんばってみますね!
できそうです。
あとあのサンプルスクリプト集って本いい本なんですかねぇ?

36 :
再起だけど
function tree ($parent = 0) {
$result=mysql_query("select * from tree where parent = $parent order by no desc");
while($array=mysql_fetch_array($result))
{
print("{$array[no]}");
print("{$array[name]}");
print("{$array[date]}");
print("{$array[msg]}");
tree($array[no]); // 再起呼出
}
mysql_free_result($result);
}
ってやればイイと思われ。
ちなみに動作未確認。
あとは自分で頑張れ。

37 :
>>36
ありがとう(p_`)
こんなに優しくされたの初めてだよ、これをリファレンスにするよ

38 :
あ、ちょっとどうでもイイけど、
print 使うより echo 使ったほうが早いよ。

39 :
>>38
そうなん?
printは値を返すからその分スピードがechoの方が速いって解釈で
いいのかな?
ってかprintってエイリアスなのだろうか。

40 :
 あるネット関連会社の社長は、「いずれにしても2ちゃんねるは
資金が底をつけば終わり。あまり知られていないことだが、
2ちゃんねる内部関係者によると今、大手通信会社系が調査費名目で資金提供している。
だが、それが止まれば続けてはいけないだろう」と証言する。
2ちゃんねるが判決によって力を失った場合、資金提供の打ち切りも予想される。
http://ascii24.com/news/reading/causebooks/2002/07/01/636911-000.html
 以下、別の記事のキャッシュ http://memo2ch.tripod.co.jp/article.html
 2ちゃんねるに近いあるインターネット関連会社の社長は、2ちゃんねるの幹部から得
た話として証言する。「2ちゃんねるは、運営者や幹部などがそれぞれ別々に会社を
作りカネの流れを見え難くしているが、実際の資金源は複数の大手通信会社系からの
調査費名目のカネ。月額で計約700万円と言い、年間にすれば1億円近く。額はともあ
れ、これは通信会社系的には、ぼう大なトラフィックを調査すると言う表向きの理由
が一応は立つ。自社系に都合の悪い書き込みがされた時に優先的に削除してもらうこ
とも期待している」と前置きし「通信会社系の削除の期待も含めて、2ちゃんねるは
総会屋と同じになっている」と言うのだ。
 その具体的な理由として社長は、こう話す。「2ちゃんねるはボランティアの削除人
が書き込みをチェックして、好ましくない書き込みを一所懸命削除している、という
ことになっているが、あれはウソ。削除人には給料が支払われ、その給料の原資と
なっているのが、まずいことを書き込まれた企業が削除要求とともに渡す裏金。これ
はまさに、総会屋の構図そのものだ。これまでになっているのは金額で折り合え
なかったり、裏金を出さない強い態度の企業とだけだ」

41 :
(^^)

42 :
(^^)

43 :
>>39
何かagaってるのでついでに書いておくと、ソース見れば判る
(エイリアスの定義があるのでCがそんなに読めなくても判るよ)けど、
エイリアスじゃないです。リファレンスで調べても戻り値のある/なしや
引数の違い(,区切りで複数OKなど)もあるので、その辺でも判るかと。

44 :
(^^)

45 :
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

46 :
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―

47 :
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

48 :
携帯ゲーム機"プレイステーションポータブル(PSP)
 このPSPは、新規格UMD(ユニバーサルメディアディスク)というディスクを利用しており、そのサイズは直径6cmととても小さい(CDの半分程度)。 容量は1.8GBとなっている。
画面は4.5インチのTFT液晶で、480px x 272px(16:9)。MPEG4の再生やポリゴンも表示可能。外部端子として、USB2.0とメモリースティックコネクタが用意されているという。
この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。
任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。

49 :

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

50 :
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

51 :
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ

52 :
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

53 :
便乗質問、
HTMLに関する質問ですが、ツリーのアルゴリズムについてなので。。。
HTMLタグの<ul><li><li></ul>をネストして書こうと思っているのですが、
データベースを使っていたりデータベースをチューニングしてる関係などにより、
各項目について、
●上から何番目か($nとします)・・・@seq =(1,2,3,4,5,6,7,8,9,10)とし、$nには1,2,3,4,..10が入ります
●階層の深さが何階層目か($depth[$n]とします)
●項目名($name[$n]とします)
しかわかっていません。
★参考:<ul><li></li></ul>の見た目とソースの対応を、下記URLにおいておきます。
http://31.com/tmp/ul_algorithm.html
で、やりたいのはこれらの情報を使って
*上から順*にソースを書き込んでいきたいということです。
そのためのアルゴリズムがわからずに苦慮しています。
$depth[n]=$depth[n-1]のときは、
単に<li>name(n)</li>と書けばいいことは自明です
しかし、それ以外のパターンのアルゴリズムがわからず。。。
なお、アルゴリズムの考え方やそのヒントでも、phpでやperlのソースでも、
あるいは、ヒントだけでもいいので、教えていただければ幸いです。

54 :
どなたかお願いします。

55 :
> しかし、それ以外のパターンのアルゴリズムがわからず。。。
行頭 → <ul> * $depth[n]
$depth[n-1]-$depth[n]=1 → <ul>
$depth[n-1]-$depth[n]=2 → <ul><ul>
$depth[n-1]-$depth[n]=-1 → </ul>
行末 → </ul> * $depth[n]
単純にこれじゃダメかい?

56 :
>>55さん、ありがとうございます。そうか、ulとliをいっぺんに考えてたから、混乱してました。
最初にulを考えて、そのあとliを考えたらうまくいきました。参考までにそのソース。
while ($row = pg_fetch_array($rs)) {
    $n++;
    $depth[$n] = $row[depth];//深さ(最小は1)
    $name[$n] = $row[name];//項目名
    //わかりやすく
    $now_depth = $depth[$n];
    $name = $name[$n];
    //</li></ul>を挿入
    $ul_li_insert = $before_depth - $now_depth;
    if ($n >= 2) {
        if ($ul_li_insert >= 0) $HTMLcattree .= "</li>\n";
        for ($i=1;$i<=$ul_li_insert;$i++){
            $HTMLcattree .= "</ul>\n";
            $HTMLcattree .= "</li>\n";
        }
    }
    //<ul><li>を挿入
    $ul_li_insert = $now_depth - $before_depth;
    for ($i=1;$i<=$ul_li_insert;$i++){
        $HTMLcattree .= "<ul>\n";
    }

57 :
(つづき)
    $HTMLcattree .= "<li>\n";
    //項目名を表示
    $HTMLcattree .= $name;
    //「前の項目の階層数」として使う
    $before_depth = $now_depth;
}
//締めの、</li></ul>を挿入
$ul_li_insert = $before_depth;
$HTMLcattree .= "</li>\n";
for ($i=1;$i<=$ul_li_insert;$i++){
    $HTMLcattree .= "</ul>\n";
    $HTMLcattree .= "</li>\n";
}
$HTMLcattree .= "</ul>\n";
print $HTMLcattree;
//ありがとうございました。

58 :
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

59 :
てst

60 :
コンピュータサイエンスの基本として、データ構造〜とりわけツリーの扱いは基本かつ大事なんですね。

61 :
>>1
 Z
  z
  z
 <⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄

62 :11/11/21
てすと
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
【企画】CGIでRPGつくーる
■WEBプログラマ交流すれ■
webftpについておしえてくれぇ!!
PerlだけでDBを構築する