webForumDet fria alternativet

Jämföra från en post med flera.

Databaser & SQL

2 svar · 479 visningar · startad av Fredde Mannen

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

Den SP som jag använt för sökning har funkat bara fint tills givetvis en kund vill förbättra sökfunktionen, eftersom SPn har ex. antal år på nacken och kunder har inte haft några större krav på sökfunktionen så har den funkat och varit tillfredställande. Iofs inte jag som skrivit den från början, men i alla fall här kommer mitt försök att förklara problemet.

Innan min modifiering för att förbättra sökfunktionen så kunde man enkelt kolla vilka träffar som fanns inom:

.. (@ObjektIdavdelning_o = null OR T_PUP_PERSONUPPGIFTER.OBJ_ID_ORGANISATIONSTILLHORIGHET IN (SELECT OBJ_ID FROM #ObjektTemp)) ..

Detta funkade bra eftersom T_PUP_PERSONUPPGIFTER fanns med i den huvudsakliga selectsatsen.

	SELECT DISTINCT
		T_FOG_FORSLAG.FOG_DIARIENUMMER As Diarienummer,
		T_FOG_FORSLAG.FOG_NAMN AS Namn,
		FOG_INLAMNAT_DATUM AS InlamnatDatum,
		FTS_NAMN AS Forslagsstatus,
		T_FOG_FORSLAG.FOG_ID AS Id,
		T_FGG_FORSLAGSGIVARE.FGG_ANONYM as Anonym
	FROM T_FOG_FORSLAG, T_PUP_PERSONUPPGIFTER, T_FGG_FORSLAGSGIVARE, T_FTS_FORSLAGSSTATUS
	WHERE
			T_FGG_FORSLAGSGIVARE.FOG_ID = T_FOG_FORSLAG.FOG_ID AND
			T_FOG_FORSLAG.FTS_ID = T_FTS_FORSLAGSSTATUS.FTS_ID AND
			T_FOG_FORSLAG.FOG_ID = T_FGG_FORSLAGSGIVARE.FOG_ID AND
(@ObjektIdavdelning_o = null OR T_PUP_PERSONUPPGIFTER.OBJ_ID_ORGANISATIONSTILLHORIGHET IN (SELECT OBJ_ID FROM #ObjektTemp))  AND ...

Som nu är grovt om skriven till:

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_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_DIARIENUMMER+' '+ifog.FOG_NAMN+' '+CONVERT(VARCHAR(8000),ISNULL(ifog.FOG_PROBLEMBESKRIVNING,''))+' '+CONVERT(VARCHAR(8000),ISNULL(ifog.FOG_FORSLAG,'')) +' '+CONVERT(VARCHAR(8000),ISNULL(ifog.FOG_FORVANTAT_RESULTAT,'')) + '' LIKE '%'+ tbl.item +'%'				
				where ...

efter WHERE i denna kommer då de ytterligare kriterierna för att minska antalet träffar. Nu funkar givetvis inte denna kodsnutt:

(@ObjektIdavdelning_o = null OR T_PUP_PERSONUPPGIFTER.OBJ_ID_ORGANISATIONSTILLHORIGHET IN (SELECT OBJ_ID FROM #ObjektTemp))

Har skrivit om hela sökfunktionen och detta är det som har skapat mest huvudbry.. och jag börjar sakta men säkert bli flint.

Hur skulle man kunna skriva om

(@ObjektIdavdelning_o = null OR T_PUP_PERSONUPPGIFTER.OBJ_ID_ORGANISATIONSTILLHORIGHET IN (SELECT OBJ_ID FROM #ObjektTemp))

För att funka med den nya varianten.

Medlem sedan dec. 20025 483 inlägg
#2

Är det inte bara att joina in T_PUP_PERSONUPPGIFTER också då?

Medlem sedan nov. 20014 054 inlägg
#3

Peter S skrev:

Är det inte bara att joina in T_PUP_PERSONUPPGIFTER också då?

Jo, det löste det hela. Dock när jag gjorde det första gången placerade jag den i subqueryn men så jag kunde få in övriga sökkriterier där också som baserades på pup.

Nu placerade jag den utanför och använda endast det sökkriteria som var ett problem och placerade det utanför subqueryn också.

Så nu funkar det fin fint... verkar det som! :D

246 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)