mysql:6226
From: "kosugi" <"kosugi" <kosugi@xxxxxxxxxx>>
Date: Thu, 19 Sep 2002 06:39:43 +0900
Subject: [mysql 06226] Re: スレッド式掲示板のテーブル構造について
小杉です。 自己レス:訂正です ID | rootNo | oyaNo | treeString(char) --------------------------- 354 | 354 | 0 | 1 355 | 354 | 354 | 11 356 | 354 | 355 | 111 400 | 354 | 356 | 1111 357 | 354 | 354 | 12 358 | 354 | 357 | 121 401 | 354 | 358 | 1211 502 | 354 | 357 | 122 506 | 354 | 502 | 1221 508 | 354 | 506 | 12211 snip... 805 | 354 | 708 | 139 806 | 354 | 805 | 1391 807 | 354 | 708 | 13a treeStringは一桁で順序を示す順序キーです。桁上がり の防止と、正しくソートするために、文字列型を使って います。その分、次の文字列をプログラムで与えなけれ ばなりません。(配列+順序) たとえば、502は357に対するレスですが、すでに358で レスがついているため、357のtreeString の12に2を付 け加えて、122をtreeStringとします。 805は、708に対する9番目のレス。806は805に対するレ ス。807は708に対する10番目のレスです。 ちなみに、708は書いていませんが354に対する3番目の レスであることがわかります。 このテーブルでは下記のようなことが簡単に実現できま す。 rootNoでスレッド全体を取り出す oyaNoで特定のメッセージについた直レスを取り出す。 treeStringで特定のメッセージ以下のtreeをすべて取り 出す。 個々のメッセージはスレrootと直親を持つ treeが深くなったときは、任意の階層まででレプリケー トできる。 文字列を利用したためのレス数の制限は、前記した例外 処理でも回避できますが、フラグフィールドを別に設け ればtreeをネストして利用することも出来ます。 また、treeStingは、1桁で数値とアルファベットを利用 して35までの順序をつけられますが、二桁区切りにすれ ば、35*35=1225までの順序を与えられます。 ----- Original Message ----- From: "kosugi" <kosugi@xxxxxxxxxx> To: <ml@xxxxxxxxxx> Sent: Wednesday, September 18, 2002 10:10 PM Subject: [mysql 06221] Re: スレッド式掲示板のテー ブル構造について > 小杉です > > 掲示板を作るときに注意するのは登録時よりも閲覧時 にスピードが要求される点では > ないでしょうか? > 個々のメッセージがoyanoを持って再帰的に呼び出す 方法よりも、メッセージの登録 > 時にツリー構造を持たせる方法を提案します。(問題 はいくつかありますが) > > 任意のレスメッセージはルートメッセージとしての oyanoを持ちます。 > 問題は再帰的方法以外に、ツリー構造を再現する方法 です。 > > 下記のようなメッセージ構造があったとすると、 > > ---------(1) > ---------(2) > ---------(3) > ---------(4) > ---------(5) > ---------(6) > ---------(7) > ---------(8) > ---------(9) > ---------(10) > それぞれを下記のようにtreeStringを与えて登録する > ID | oyano | treeString(char) > --------------------------- > 354 | 354 | 1 > 355 | 354 | 1.1 > 356 | 354 | 1.1.1 > 400 | 354 | 1.1.1.1 > 357 | 354 | 1.2 > 358 | 354 | 1.2.1 > 401 | 354 | 1.2.1.1 > 502 | 354 | 1.2.2 > 506 | 354 | 1.2.2.1 > 508 | 354 | 1.2.2.1.1 > > /* .dotは不要です・・ > > この方法ですと、oyano 354で呼び出されたレコード をtreeStringでソートすること > により、上記の順で取り出せます。(数値型や autoincrementだとこのようにはソー > トされません) > > 基本的な考え方は以上ですが、 > 9の次はa,b,c・・・とつづけて、zでエラーを返す。 > charサイズの限界でエラーを返す > という例外処理が必要になります。 > charの桁数までしかレスがつけられないのでは実用的 ではないため、 > childTreeStringフィールドをいくつか作っておき、 限界が発生したところで > childTreeStringに移行します。 > これで掲示板としてはまっとうなレスの数を維持でき ます。 > > いかがでしょう? > > > -- > Tomoaki Kosugi > kosugi@xxxxxxxxxx > > > > > > > > > > >
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]