X



phpのツリーのアルゴリズムがわかんねんんだよ!
0001nobodyさん垢版02/03/10 17:26ID:G6SLgnQA
教えてください(´Д`;)
mysql使って普通の掲示板は組めたんですがそれにレスできる
こんな感じ↓
コメント1
コメント1
コメント1に対するレス
コメント1
簡単なサンプルで解説してください
本スレで教えてもらったけど何度が高すぎました。。
>>2
掲示板ソース、コレにコメント付けれるように直すにはどうすれば
いいんでしょうか?
0002nobodyさん垢版02/03/10 17:26ID:G6SLgnQA
エラー処理は省いてます
<?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>");
}
0003nobodyさん垢版02/03/10 17:28ID:G6SLgnQA
DB構造
時間
名前
本文


知ってる方がおられたら伝授してください
0004困った1(´Д`;)さん ◆JjsLsZzw 垢版02/03/10 17:31ID:G6SLgnQA
自分なりに調べたところユニークなID持たせるっていいますよねぇ
ぶっちゃけどうやってID持たせるの?(゜q゜)ボケー
って感じでわけわかんないんです(;;)
0006困った1(´Д`;)さん ◆h49ANHg2 垢版02/03/10 18:10ID:G6SLgnQA
>>5
というと?
その型が関係してるのとかまでは探れたんですが、、
後がまったくなんです、、、(;;)
それをどう利用したらいいんでしょうか?
0009nobodyさん垢版02/03/11 01:23ID:???
ツリーっつーのはさ、再帰だよ。サイキっく
0010nobodyさん垢版02/03/11 03:38ID:IZPenvnO
シーケンスわかんねぇなら発言毎に
インクリメントしてしまっとけば。
0011困った1(´Д`;)さん ◆JjsLsZzw 垢版02/03/11 09:24ID:6zR1ua/0
みなさんおはようございます!!!!!!!!!!!!

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

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


0013名無しさん垢版02/03/11 16:30ID:???
カキコした順に通し番号を1から振っていく。それがそのカキコについた名前。
レスをつけたいときにはその名前で指名する。
表示するときは指名されたものをうしろにくっつける。
0014困った1(´Д`;) ◆JjsLsZzw 垢版02/03/11 18:03ID:6zR1ua/0
>>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>
0015名無しさん垢版02/03/11 18:41ID:???
>>14
なぜ皆mysql_query()のエラーチェックをしないのかと小一時間……(以下略)
0016困った1(´Д`;) ◆JjsLsZzw 垢版02/03/11 19:03ID:6zR1ua/0
>>15
普段は付けてるけど、エラー処理入れると
ここに書き込めないので省いたんです、、
それよりそれより、、ソワソワ
0017nobodyさん垢版02/03/11 19:12ID:???
ID,親記事ID,ツリーID
これくらい用意しろ

関数化しねぇと再帰できないぞ。再起不能
0018困った1(´Д`;) ◆JjsLsZzw 垢版02/03/11 19:16ID:6zR1ua/0
>>17
とりあえずそれ組んでみます
ありがとうございます。
0019nobodyさん垢版02/03/11 21:36ID:???
メッセージID(自分ID)と親IDだけあればいいんでないの?
0020困った1(´Д`;) ◆JjsLsZzw 垢版02/03/11 21:56ID:6zR1ua/0
>>19
とりあえずDBでoyaidとtreeid作りました(msgnoは最初からある)
今日は寝るので明日指導してくだちゃい。おやすみなさい、、
002113垢版02/03/12 00:41ID:???
>>19
禿同。単なる有向グラフと思われ。
0022困った1(´Д`;)垢版02/03/12 15:55ID:BOgC8D8B
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>
0023nobodyさん垢版02/03/12 16:22ID:???
「レスをする」ということで、レスをするツリーIDを渡す
0024困った1(´Д`;) ◆JjsLsZzw 垢版02/03/12 16:26ID:BOgC8D8B
>>23
というと?それは具体的に何をするんでしょうか?
あたいの脳がその部分だけかけていて考えられないのです!
サンプル組んでください!
0026nobodyさん垢版02/03/12 17:01ID:???
サンプル組むってほどのものかよ。。。

セッションでツリーID渡すかINPUTタグのHIDDENで仕込んどけ
002713垢版02/03/12 19:18ID:???
そろそろ放置かな。
0028nobodyさん垢版02/03/13 08:16ID:???
だから親のIDを持っとくんだってばさ
mysql_query("insert into tree(datetime, name, msg, refid) values(now(),'$name', '$msg', '$oyaIDne')");

あとは再帰でツリーは描けるから。
0029nobodyさん垢版02/03/13 15:49ID:???
PHP4サンプル集 秀和システム 著 山田祥寛
ここにそのまま載ってるぞ
よって
===============終了===============
0030困った1(´д`) ◆JjsLsZzw 垢版02/03/13 16:34ID:bTyUwLh6
>>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
0031nobodyさん垢版02/03/13 16:42ID:???
根気のいい俺でもそろそろ限界か?
リンクに貼ってあるprint_numberっていうパラメータのこと聞いてるんだよ
ね?
君は基本的にCGIを1から勉強した方が良いかと思われ。
>>29で紹介した本を買って、その他いろんなドキュメントを読んでみれ。
0032nobodyさん垢版02/03/13 16:43ID:???
ついでに
再帰もほどほどの件数にしとかないとメモリ食うからね。
0035◆JjsLsZzw 垢版02/03/13 19:10ID:bTyUwLh6
>>34
(゚д゚)ハッ!良く見直してみたらわかった!
ツリーの仕方もログ読み直してわかった!
ありがとうございます!!!1111!!!
しばらくがんばってみますね!
できそうです。
あとあのサンプルスクリプト集って本いい本なんですかねぇ?
0036nobodyさん垢版02/03/13 19:11ID:OqBWlBtp
再起だけど

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);
}

ってやればイイと思われ。
ちなみに動作未確認。
あとは自分で頑張れ。
00371 ◆JjsLsZzw 垢版02/03/13 19:46ID:???
>>36
ありがとう(p_`)
こんなに優しくされたの初めてだよ、これをリファレンスにするよ
0038nobodyさん垢版02/03/14 02:24ID:80hRLeB+
あ、ちょっとどうでもイイけど、
print 使うより echo 使ったほうが早いよ。
0039nobodyさん垢版02/03/18 17:09ID:???
>>38
そうなん?
printは値を返すからその分スピードがechoの方が速いって解釈で
いいのかな?
ってかprintってエイリアスなのだろうか。
0040真実垢版03/01/02 16:46ID:???
 あるネット関連会社の社長は、「いずれにしても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ちゃんねるはボランティアの削除人
が書き込みをチェックして、好ましくない書き込みを一所懸命削除している、という
ことになっているが、あれはウソ。削除人には給料が支払われ、その給料の原資と
なっているのが、まずいことを書き込まれた企業が削除要求とともに渡す裏金。これ
はまさに、総会屋の構図そのものだ。これまで裁判になっているのは金額で折り合え
なかったり、裏金を出さない強い態度の企業とだけだ」
0043nobodyさん垢版03/03/13 19:06ID:???
>>39
何かagaってるのでついでに書いておくと、ソース見れば判る
(エイリアスの定義があるのでCがそんなに読めなくても判るよ)けど、
エイリアスじゃないです。リファレンスで調べても戻り値のある/なしや
引数の違い(,区切りで複数OKなど)もあるので、その辺でも判るかと。
0045山崎渉垢版03/04/20 06:17ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0046山崎渉垢版03/05/22 02:18ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0047山崎渉垢版03/05/28 17:11ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0048t-akiyama垢版03/05/30 21:47ID:???
携帯ゲーム機"プレイステーションポータブル(PSP)

 このPSPは、新規格UMD(ユニバーサルメディアディスク)というディスクを利用しており、そのサイズは直径6cmととても小さい(CDの半分程度)。 容量は1.8GBとなっている。
画面は4.5インチのTFT液晶で、480px x 272px(16:9)。MPEG4の再生やポリゴンも表示可能。外部端子として、USB2.0とメモリースティックコネクタが用意されているという。

この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。
任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。
0049山崎 渉垢版03/07/15 11:23ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0050山崎 渉垢版03/08/02 02:30ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0051ぼるじょあ ◆ySd1dMH5Gk 垢版03/08/02 05:04ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
0052山崎 渉垢版03/08/15 23:22ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0053nobodyさん垢版04/06/17 09:14ID:???
便乗質問、
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のソースでも、
あるいは、ヒントだけでもいいので、教えていただければ幸いです。
005453垢版04/06/17 23:25ID:hAY00qtb
どなたかお願いします。
0055nobodyさん垢版04/06/18 08:59ID:???
> しかし、それ以外のパターンのアルゴリズムがわからず。。。
行頭 → <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]

単純にこれじゃダメかい?
005653垢版04/06/19 00:51ID:???
>>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";
    }
005753垢版04/06/19 00:51ID:???
(つづき)
    $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;

//ありがとうございました。
0058125x100x255x204.ap125.ftth.ucom.ne.jp垢版2006/03/30(木) 00:25:16ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0060nobodyさん垢版2006/08/22(火) 10:16:04ID:???
コンピュータサイエンスの基本として、データ構造〜とりわけツリーの扱いは基本かつ大事なんですね。
0061nobodyさん垢版2009/05/09(土) 16:15:08ID:unp/QYBC
>>1
 Z
  z
  z
 <⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
0066nobodyさん垢版2017/12/30(土) 16:03:24.14ID:YhlYw6jg
誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。

グーグル検索⇒『半藤のブブイウイウレレ』

Z1UWE85V4W
0068nobodyさん垢版2023/08/15(火) 11:45:17.13ID:???
やめてっ!そこはビンカンなの!
レスを投稿する


ニューススポーツなんでも実況