mysql:6231
From: "KAWAI,Takanori" <"KAWAI,Takanori" <GCD00051@xxxxxxxxxx>>
Date: Thu, 19 Sep 2002 10:46:55 +0900
Subject: [mysql 06231] Re: スレッド式掲示板のテーブル構造について
川合孝典です。 長い上にオフトピだとは思うのですが、ご勘弁を ----- Original Message ----- From: "Tybalt of Capulet" <ice-man@xxxxxxxxxx> To: <ml@xxxxxxxxxx> Sent: Thursday, September 19, 2002 1:02 AM Subject: [mysql 06223] Re: スレッド式掲示板のテーブル構造について > 神崎です。 > > みなさま貴重なご回答ありがとうございます。 > > 個人的には川合さんの > > > 実際に表示する場合には > > SELECT * FROM BBS > > ORDER BY oyano DESC, resno > > > > あたりで取り出して、プログラム内部でmsgno、resnoを見て > > 並べ替えています。 > > の方法が非常に気になりますがいくら考えてもロジックが全く思い浮かびません。 > 提示できるロジック等ございますでしょうか? (以下略) PHPでも今やってますが、余分なコードがついているのでPerlで説明します。 コードの解説はここではしません。(コメントでだいたいわかるかと思います) #[スクリプト] #以下のような行を表すとして #---------(1) # ---------(2) # ---------(3) # ---------(4) # ---------(5) # ---------(6) # ---------(7) # ---------(8) # ---------(9) # ---------(10) use strict; my @aRows= ( # [識別子,スレッド開始MSG,参照MSG] [1, 1, 1], [2, 1, 1], [3, 1, 2], [4, 1, 3], [5, 1, 1], [6, 1, 5], [7, 1, 6], [8, 1, 5], [9, 1, 8], [10, 1, 9]); #最初に(スレッド順)+参照しているメッセージNo順に並べ替え @aRows = sort {$a->[2] <=> $b->[2]} @aRows; #ここまではORDER BYを使って指定したつもりで。 my $raRow; my @aRes=(); foreach $raRow (@aRows) { #ここは一件ずつ取り出しているつもり #自分自身を参照しているときには、そのまま末尾に追加 if($raRow->[0] == $raRow->[2]) { push @aRes, [ @$raRow, 0]; } else { my $iPos; #結果を入れる配列を末尾からなめる for($iPos=$#aRes; $iPos >=0; --$iPos){ #参照MSGが同じであれば、その直後にレベルを1つ下げて追加 if($aRes[$iPos][0] == $raRow->[2]) { splice(@aRes, $iPos+1, 0, [ @$raRow, $aRes[$iPos][3]+1]); last; } #同じMSGを参照しているのであれば、その直後に同じレベルで追加 elsif($aRes[$iPos][2] == $raRow->[2]) { splice(@aRes, $iPos+1, 0, [ @$raRow, $aRes[$iPos][3]]); last; } } } } my $raItm; my $sPad; #できたものを表示 foreach $raItm (@aRes){ $sPad = ' ' x $raItm->[3]; #レベルにあわせてインデント print $sPad, '---------(' , $raItm->[0], ")\n"; } __END__ [実行結果] ---------(1) ---------(2) ---------(3) ---------(4) ---------(5) ---------(6) ---------(7) ---------(8) ---------(9) ---------(10) =================================================== 川合 孝典 (Hippo2000) DBI日本語メーリングリスト管理人、Kansai.pm所属 kwitknr@xxxxxxxxxx GCD00051@xxxxxxxxxx http://member.nifty.ne.jp/hippo2000、http://www.hippo2000.info/ 「Cマガジン」でPerl DBIの連載はじまります。 http://www.cmagazine.jp/ ===================================================
6207 2002-09-18 19:27 [Tybalt of Capulet <i] スレッド式掲示板のテーブル構造について 6208 2002-09-18 19:36 ┣[荒井 哲三 <tetsumi.] 6209 2002-09-18 19:45 ┣[Yuya.Nishida. <yuya@] 6210 2002-09-18 20:23 ┃┗[Tybalt of Capulet <i] 6211 2002-09-18 20:33 ┃ ┣[Tomohiro 'Tomo-p' KA] 6213 2002-09-18 20:41 ┃ ┣["Kaigai Kohei" <kaig] 6214 2002-09-18 20:49 ┃ ┣[Yuya.Nishida. <yuya@] 6216 2002-09-18 20:54 ┃ ┗[Takanori Tobe <taka@] 6212 2002-09-18 20:37 ┣[NAGASAWA Teruo <ml@x] 6217 2002-09-18 21:16 ┣[HAMAI Kyoichi <k-ham] 6225 2002-09-19 03:20 ┃┗["umemura" <shigemi.u] 6218 2002-09-18 21:17 ┣["KAWAI,Takanori" <GC] 6219 2002-09-18 21:33 ┃┗[Tomohiro 'Tomo-p' KA] 6220 2002-09-18 22:02 ┃ ┗["KAWAI,Takanori" <GC] 6222 2002-09-18 22:14 ┃ ┣["黒木 玲" <kuroki434] 6223 2002-09-19 01:02 ┃ ┃┗[Tybalt of Capulet <i] 6224 2002-09-19 03:16 ┃ ┃ ┣[<rio-t@xxxxxxxxxx> ] 6227 2002-09-19 07:15 ┃ ┃ ┃┣["kosugi" <kosugi@xxx] 6228 2002-09-19 09:32 ┃ ┃ ┃┃┗["Takashi Yamashita" ] 6229 2002-09-19 10:06 ┃ ┃ ┃┗[Tybalt of Capulet <i] 6230 2002-09-19 10:21 ┃ ┃ ┃ ┗["黒木 玲" <kuroki434] 6232 2002-09-19 11:01 ┃ ┃ ┃ ┗[Toyoshima Hiroshi <t] 6233 2002-09-19 11:33 ┃ ┃ ┃ ┗[Tomohiro 'Tomo-p' KA] 6236 2002-09-19 12:26 ┃ ┃ ┃ ┗[Toyoshima Hiroshi <t] 6237 2002-09-19 12:52 ┃ ┃ ┃ ┗[HAMAI Kyoichi <k-ham] -> 6231 2002-09-19 10:46 ┃ ┃ ┗["KAWAI,Takanori" <GC] 6234 2002-09-19 12:18 ┃ ┗[<n.futami@xxxxxxxxxx] 6238 2002-09-19 13:52 ┃ ┣["kosugi" <kosugi@xxx] 6247 2002-09-20 11:50 ┃ ┗[Tybalt of Capulet <i] 6248 2002-09-20 12:53 ┃ ┣[Yuya.Nishida. <yuya@] 6249 2002-09-20 13:21 ┃ ┃┗["KAWAI,Takanori" <GC] 6252 2002-09-20 13:59 ┃ ┃ ┗[Yuya.Nishida. <yuya@] 6251 2002-09-20 13:51 ┃ ┣["KAWAI,Takanori" <GC] 6255 2002-09-20 22:53 ┃ ┗["kosugi" <kosugi@xxx] 6257 2002-09-21 02:31 ┃ ┗[Tybalt of Capulet <i] 6258 2002-09-21 05:18 ┃ ┗["kosugi" <kosugi@xxx] 6259 2002-09-21 08:18 ┃ ┣["黒木 玲" <kuroki434] 6260 2002-09-21 09:40 ┃ ┗["KAWAI,Takanori" <GC] 6261 2002-09-21 11:16 ┃ ┗["kosugi" <kosugi@xxx] 6262 2002-09-21 11:46 ┃ ┗["kosugi" <kosugi@xxx] 6221 2002-09-18 22:10 ┣["kosugi" <kosugi@xxx] 6226 2002-09-19 06:39 ┃┗["kosugi" <kosugi@xxx] 6235 2002-09-19 12:25 ┣[You2 <ml-mysql@xxxxx] 6239 2002-09-19 15:01 ┗[平松 幸治 <kouji@xx] OR と AND を複数使った検索で・・・ 6240 2002-09-19 15:09 ┣[平松 幸治 <kouji@xx] 6243 2002-09-19 15:35 ┃┗[平松 幸治 <kouji@xx] 6244 2002-09-19 16:34 ┃ ┗["Takashi Yamashita" ] 6250 2002-09-20 13:40 ┃ ┗[平松 幸治 <kouji@xx] 6241 2002-09-19 15:16 ┣[SAKIMURA Noriyuki <s] 6242 2002-09-19 15:16 ┗[Daiju Azuma <daiju_a]