mysql:9923
From: yoshiyama akihiko <yoshiyama akihiko <yoshiyama@xxxxxxxxxx>>
Date: Thu, 29 Jul 2004 11:00:17 +0900
Subject: [mysql 09923] Re: 芋づる式検索について
松枝さんこんにちは。 私が実現したいと思ったことは、松枝さんがおっしゃっているように 幾つの過程を経て変化するのがわからないケースに該当します。 大変参考になります。ありがとうございました。 > > 3過程(a->b, b->c, c->NULL)で変化するのが確定なら、検出するのは比較的 > 簡単でしょう。 > > ----定義と初期化(一回限り実行)---- > create table test08 (before char(1),after char(1)); > insert into test08(before,after) values('a','b'); > insert into test08(before,after) values('b','c'); > insert into test08(before,after) values('c',NULL); > ----実行---- > select s0.before,s1.before,s2.before,s2.after > >from test08 as s0 inner join > (test08 as s1 inner join test08 as s2 on s1.after=s2.before) > on s0.after=s1.before > where s0.before='a' and s2.after is NULL; > > 速度的にお勧め出来るかは別問題です。インデックスを付けたとしてもレコー > ド数の三乗に比例して時間が掛かるでしょう。 > > > 幾つの過程を経て変化するのかが分からない場合、1発のクエリで行うのは無 > 理でしょう。クエリを乱発する必要があるでしょうね。DBMSの種類やバージョン > 依存で良いのであれば、こんな感じで出来る事は出来ます。一応、循環(a->b、 > b->aの様な)や分岐(a->b、a->dの2つがある)も考慮しています。過程数には、 > textの文字列長の制限があります(超過すると永久ループ)。 > > ----定義と初期化(一回限り実行)---- > create table tmp08 (str text,next char(1),steps int); > set @_first='a'; > insert into tmp08 (str,next,steps) > select @_first,after,1 > from test08 > where before=@_first; > ----実行---- > select @_maxsteps:=max(steps) from tmp08; > insert into tmp08 (str,next,steps) > select concat(tmp08.str,test08.before) as newstr > ,test08.after as newnext,steps+1 as newsteps > from tmp08,test08 > where tmp08.next=test08.before and tmp08.steps=@_maxsteps > and test08.before <> @_first; > > 新規挿入されるレコードがある、あるいはtmp08.nextがNULLのレコードが存在 > しない間は、「実行」の部分のクエリ2発を繰り返し発行します。変化するしな > いの判定は tmp08.nextがNULLのレコードが存在するかしないかで行います。 > > MySQL変数の@_firstと@_maxlenを言語の変数に取る方がまだしも一般形でしょ > うか。 > > > 松枝知直 <tomom@xxxxxxxxxx> > http://www.argus.ne.jp/~tomom/ > > 株式会社 ハウインターナショナル ソフトウェア開発部 吉山 彰彦 福岡県飯塚市幸袋560-8 I.B.Court tel: 0948-26-3800 fax: 0948-26-3802 e-mail: yoshiyama@xxxxxxxxxx url: http://www.haw.co.jp/
9906 2004-07-28 13:26 [yoshiyama akihiko <y] 芋づる式検索について 9913 2004-07-28 17:13 ┗[ML account <ml@xxxxx] -> 9923 2004-07-29 11:00 ┗[yoshiyama akihiko <y] 9925 2004-07-29 13:09 ┗[SAITO Masaru <daisai] 9927 2004-07-29 14:53 ┗[ML account <ml@xxxxx]