webForumDet fria alternativet

Hjärnsläpp på denna syntax...

1 svar · 214 visningar · startad av desdecado

desdecadoMedlem sedan juli 2004206 inlägg
#1

(Databas: MySQL)

Har i detta exempel 3 tabeller;

PAGE <- 1:n -> LINK_PAGE_KEYWORD <- n:1 -> KEYWORD

(Med andra ord; en sida kan innehålla flera ord och ett ord kan förekomma på flera sidor. Kopplingen sker via tabellen LINK_PAGE_KEYWORD)

Nu försöker jag få till att man ska kunna söka fram sidor via orden där man kan ange *flera* ord och dessa ska vara AND, alltså om man söker på "apa gurka" så måste både ordet "apa" och "gurka" ha en koppling till samma sida för att sidan ska visas.

Skulle man kunna få ett exempel där man söker på 2st ord?

Här är *exempelkod* för 1 ord (slaktat bor onödiga kolumner/namn för exemplets skull):

SELECT *
              FROM keyword kw

              JOIN link_page_keyword lpk ON kw.Id = lpk.Pointer_keyword
              JOIN page pg ON lpk.Pointer_page = pg.Id

              WHERE kw.sKeyword = 'apa'
cyprysMedlem sedan dec. 20003 563 inlägg
#2

edit1: Sorry läste fel

edit2: Tanken är i alla fall att du vill få snittet av alla sökord. Får du en mängd A rader på sökord1, en mängd B på sökord 2. Vill du returnera intersection(A,B) då dessa rader är de enda som innehåller båda sökorden. Just snitt är lite kluriga i SQL (tycker jag i alla fall :) ) men nu vill jag ju klura lite påt. ;)

edit3: En ful bruteforce-'lösning' som i alla fall fungerar. Den kräver en extra subquery för varje ord. 'Representerat som olika färger'. Kan jämföras med min ovanstående mängdhistoria där blå = mängd A och röd = mängd B.

 select t.id from page t 
where [blue]t.id in (select t1.id
from page t1, link t2, keyword t3 
where (t1.id = t2.pointer_page 
and t2.pointer_keyword = t3.id) 
and t3.skeyword = 'foo')[/blue] 
[red]and t.id in (select t1.id
from page t1, link t2, keyword t3 
where (t1.id = t2.pointer_page 
and t2.pointer_keyword = t3.id) 
and t3.skeyword = 'bar');[/red]
135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)