2011-07-12 6 views
0

SOUNDEX(mysql/php)を使用して複数の単語をマッチさせる方法を説明してもらえますか?私は簡単なサイト内広告システムを作ろうとしています。SOUNDEXと2つのテーブルを比較しようとしています

"ad_id"と "keywords"の列を持つ表と、 "page_url"と "keywords"を持つ表があります。問題は、最初の表で、特定のad_idのすべてのキーワードが1行にありますが、2行目には次のような複数の行があります。

page_url:-----キーワード:
page1.php ----- KEYWORD1、KEYWORD2、KEYWORD3
page1.php ----- keyword4
page2.php ----- anotherkeyword

私はどの広告を把握するために2つのテーブルを比較しようとしています表示する必要があります。私は、2つ目のテーブルの同じページ名に対応する複数の行があることを理解するために、いくつかの実際の問題を抱えています。それらはすべてカンマで区切られています。

どこから始めたらいいですか?アドバイスをいただければ幸いです。ありがとう。

+0

テーブルを正規化する:キーワードを別のテーブルに移動し、彼らのPKによってページテーブル。 [OK]を – Wrikken

+0

が、私は1つのセルに格納された各PAGE_URLのキーワードのすべてを持っていると言う、すべてのように、カンマで区切ら: –

+0

はページ1 = KEYWORD1、KEYWORD2、KEYWORD3 –

答えて

-1

SQL Serverでは、この分割された関数を作成:

CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))  
returns @temptable TABLE (items varchar(8000))  
as  
begin  
    declare @idx int  
    declare @slice varchar(8000)  

    select @idx = 1  
     if len(@String)<1 or @String is null return  

    while @idx!= 0  
    begin  
     set @idx = charindex(@Delimiter,@String)  
     if @idx!=0  
      set @slice = left(@String,@idx - 1)  
     else  
      set @slice = @String  

     if(len(@slice)>0) 
      insert into @temptable(Items) values(@slice)  

     set @String = right(@String,len(@String) - @idx)  
     if len(@String) = 0 break  
    end 
return  
end 

として使用することができます:それは表形式で結果を返しますselect * from dbo.split('val1,val2,val3',',') ...

val1 
val2 
val3 

を次に、この機能を使用します。

declare @tmp table(keyword varchar(100)) 
insert into @tmp 
select tbl.item from 
(select split(t2.keyword) as item from table2) as tbl 
Select * from table1 t1 
where t1.keyword in (select keyword from @tmp) 
+0

それはsoundexesの仕組みではありません。 – Wrikken

+0

私はあなたを教えてくれませんでした、それ以上説明できますか? –

+0

あなたは答えを試したことがありますか? SOUNDEXはコンマで区切られた文字列では機能しません。少なくとも、あなたが思うようには行いません。 t1.keyword = 'foo'とt2.keyword = 'bar、foo、something'で確認してください。 – Wrikken

2

2つ目のテーブルから別のテーブルを作成する必要があります。 2つのテーブルを一致させるのは簡単です。

関連する問題