Har ett litet problem här och vet inte riktigt hur jag skall lösa det på bästa möjliga sätt, jag är inte en klippa på SQL men visst kan jag skriva avancerade saker.
Ligger nu med en SP som gör sökningar i multipla tabeller och kolumner. Jag har en avancerad och en enkel sökmetod på ASP sida som anropar då denna SP.
Lösningen jag vill skapa behandlar endast så att säga ett fritext-fält där man nu via att ex skriva in
montering
så hittar den alla poster med montering i. Nu vill man ju givetvis kunna begränsa sökträffarna ytterligare och jag vill kunna hitta samtliga som innehåller ex:
montering AND urologi
Då skall samtliga poster med montering och urologi i sig hittas, sätter jag
montering OR urologi
Så skall samtliga poster med montering eller urologi hittas.
Kan man lösa detta genom att bara använda sig av SPn så att säga, där man skickar in fritext-fältet? Samt har ni några bra exempel på det ??
Får du "montering OR urologi" i strängen från söksidan, kan du väl använda det i din sökning? 'OR' eller *AND' är ju precis vad du skulle skriva om du sökt manuellt i databasen.
Får du "montering OR urologi" i strängen från söksidan, kan du väl använda det i din sökning? 'OR' eller *AND' är ju precis vad du skulle skriva om du sökt manuellt i databasen.
SELECT * FROM tbl WHERE txt='" & sökstr & "'"?
SP överlåter jag till dig att anpassa. :)
Men om jag får in ex. "montering OR urologi" i söksträngen och kastar in den till SPn, då måste jag väl dela upp strängen. I och med att om den får in "montering OR urologi" så blir resultatet:
select * from tbl where txt='montering OR urologi'
Vilket blir fel. Nå väl, jag löste det genom att skippa OR eller AND i söksträngen och låta " " agera avskiljare mellan orden.
Sedan i SPn så splittade jag sökordet på " " och la in dem i en temporär tabell, sedan gjorde jag en join med den temporära tabellen med like.
Slut resultatet blev:
select
fog.FOG_DIARIENUMMER As Diarienummer,
fog.FOG_ID AS Id,
fog.FOG_NAMN AS Namn,
fog.FOG_INLAMNAT_DATUM AS InlamnatDatum,
fts.FTS_NAMN AS Forslagsstatus,
fgg.FGG_ANONYM As Anonym
from
T_PUP_PERSONUPPGIFTER,
T_FOG_FORSLAG fog inner join
(
select ifog.FOG_ID, (Count(*) * 1.0 / @Wordcount) as traffpoang
from T_FOG_FORSLAG ifog
inner join @Table tbl on
(
ifog.FOG_NAMN like '%'+ tbl.item +'%' OR
ifog.FOG_DIARIENUMMER like '%'+ tbl.item +'%' OR
CONVERT(VARCHAR(8000),ifog.FOG_PROBLEMBESKRIVNING) like '%'+ tbl.item +'%' OR
CONVERT(VARCHAR(8000),ifog.FOG_FORSLAG) like '%'+ tbl.item +'%' OR
CONVERT(VARCHAR(8000),ifog.FOG_FORVANTAT_RESULTAT) like '%'+ tbl.item +'%'
OR tbl.Item = NULL
) group by ifog.FOG_ID
) a on fog.FOG_ID = a.FOG_ID
inner join
T_FGG_FORSLAGSGIVARE fgg on fgg.FOG_ID = fog.FOG_ID
inner join
T_FTS_FORSLAGSSTATUS fts on fts.FTS_ID = fog.FTS_ID
where -- lite annat småt och gott som skall matcha in sökningen.....
Funkar på bra.. kan ju nu också sortera dem efter "relevans" ..
251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2