Попытка сравнить две таблицы с SOUNDEX - PullRequest
0 голосов
/ 13 июля 2011

Может кто-нибудь объяснить, как использовать SOUNDEX (mysql / php) для сопоставления нескольких слов? Я пытаюсь создать простую рекламную систему на месте.

У меня есть одна таблица со столбцами "ad_id" и "ключевые слова", а другая таблица с "page_url" и "ключевые слова". Проблема в том, что в первой таблице все ключевые слова данного ad_id находятся в одной строке, а во второй есть несколько строк, подобных этой:

PAGE_URL: ----- Ключевые слова:
page1.php ----- ключевое слово1, ключевое слово2, ключевое слово3
page1.php ----- keyword4
page2.php ----- другое ключевое слово

Я пытаюсь сравнить две таблицы, чтобы выяснить, какое объявление следует показывать. У меня действительно есть некоторые проблемы, пытаясь заставить его понять, что есть несколько строк, которые соответствуют одному и тому же имени страницы во второй таблице, не говоря уже о том, что все они разделены запятыми!

Есть идеи, с чего начать? Любой совет будет принят во внимание. Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Вам нужно создать еще одну таблицу из второй таблицы с одним ключевым словом для каждой строки. Тогда сопоставить две таблицы легко.

0 голосов
/ 13 июля 2011

создайте эту функцию разделения на сервере sql:

   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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...