webForumDet fria alternativet

sök i kolumn men på flera ord

ASP

2 svar · 364 visningar · startad av Fredde Mannen

Medlem sedan nov. 20014 054 inlägg
Frågan#1

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 ??

Medlem sedan apr. 20031 660 inlägg
#2

HEJ!

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. :)

Medlem sedan nov. 20014 054 inlägg
#3

J.N. skrev:

HEJ!

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" ..

255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)