webForumDet fria alternativet

Sökning i databas, idé torka!

ASP

5 svar · 250 visningar · startad av Dudde

Medlem sedan feb. 200117 inlägg
Frågan#1

Hej!
Jag sitter och klurar på en nöt jag inte riktigt kommer på...
Jag ska göra en sökfunktion till följande:
En massa val (properties) från ett formulär sparas i en databas...(textinput, dropdown-val, radiobutton)...
Valen lagras som sagt i en databas. (Hur basen ser ut är inte bestämt ännu.)
Söknings-formuläret kommer att se liknande ut som formuläret med (properties)...
I sökningsformuläret skall man kunna välja en vikt på varje fråga...
Dvs. 1-5 (radio-buttons) där 1 betyder att frågan inte har så stor betydelse och 5 att frågan är viktig...
Sedan skall matchningen gå till så att om många alternativ stämmer med (properties)-basen kommer de med, sortering på summan av vikterna!

Tanke 1:
Om man spar de sökta alternativen i en databas och sedan kör en sql-fråga på baserna "relaterade"..Hur skulle den kunna se ut?
Tanke 2:
Man kör flera sql och kollar varje val för sig...Känns lite lågt?
Tanke 3:
Någon som har en idé?

Hoppas Ni har några kommentarer, ideér, gärna kodsnuttar alt. sql-uttryck från liknande kompositioner...

Hoppas på svar!
/Dudde.

Medlem sedan dec. 19996 721 inlägg
#2

Välkommen hit Dudde!

Ditt problem låter intressant, men jag skulle gärna vilja att du förklarade det lite mer, innan jag sätter tänderna i det. Ett mer reellt exempel, liksom.... :)

Medlem sedan dec. 200012 464 inlägg
#3

Ett uppkast

Jag tänker att man har en tabell (properties) där man lagrar vilka egenskaper ett objekt har. Den har kolumnerna

pid propertyName propertyValue

där pid är vilket objekt det gäller för.

När du vill göra en matchning så tänker jag mig att man lägger in de sökta egenskaperna i en annan tabell (searchers) som har kolumnerna

sid propertyName minV maxV weight

minV och maxV är till för att hantera om man vill söka inom ett intervall t.ex mellan 80 och 90 kg. Om man har ett diskret värde så lägger man det i både minV och maxV. Weight är en siffra som anger hur viktigt det är att egenskapen matchar. Exakt hur man väljer detta värde får man nog prova sig fram till.

För att ta fram hur bra något matchar kan man då göra följande select

select pid, sum(weight) as matchRate
from properties p, searchers s
where p.propertyName = s.propertyName
and p.propertyValue between s.minV and s.maxV
group by pid
order by matchRate

Alltså desto fler matchningar desto högre summa. Det här är inte något som jag har gjort i något sammanhang så jag vet inte hur effektivt det blir om man har stora datamängder.

Om man vill att några egenskaper måste gälla så kan man ju vikta dom väldigt högt.

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 200117 inlägg
#4

LarsG:s inlägg är en intressant metod..
Dock blir det lite jobbigt när varje val i formuläret måste en egen post...
Det skulle bli enormt med poster om man tänker sig 40-50 val i properties-databasen multiplicerat med antalet ID:n.
Jag tänkte mig kanske att baka ihop alla valen från properties-formuläret till en enda sträng och sedan kasta in i basen. Sen söka i strängen.
Eller köra relaterat mellan baserna med varje val i en kolumn...Men då blir viktningen knepig...
Eller?
/Dudde

Medlem sedan dec. 19996 721 inlägg
#5

LarsGs variant är bra. Att baka in allt i en sträng vore verkligen att skjuta sig i foten.

Medlem sedan feb. 200117 inlägg
#6

Jo det känns inte riktigt rätt...
Och jo det känns klart bättre med LarsG:s variant...

För övrigt mkt trevligt forum!
/Dudde

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