[前][次][番号順一覧][スレッド一覧]

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]