webForumDet fria alternativet

Sökning genom Multiselect till SP?

ASP

3 svar · 452 visningar · startad av SteveP

Medlem sedan mars 2003772 inlägg
Frågan#1

Jag har en vanlig söksida där man fyller i några fält och sedan submittar.
Värdet i fälten tas emot i en sträng och sedan skickas den som en parameter till en Stored Procedure som gör själva sökningen.

Inga konstigheter.

VarFirstName = Request.Form("VarFirstName")
VarLastName = Request.Form("VarLastName")

SQL = "sp_getaddresspriority_swe '" & VarFirstName & "','"  & VarLastName & "'"
SET RS = Connect.Execute(SQL)

Men hur gör man om man har ett multiselect fält där användaren exempelvis väljer 3 värden?

<SELECT NAME="Brick" MULTIPLE SIZE="7">
<OPTION VALUE="Brick1">Brick1</OPTION>
<OPTION VALUE="Brick2">Brick2</OPTION>
<OPTION VALUE="Brick3">Brick3</OPTION>
<OPTION VALUE="Brick4">Brick4</OPTION>
<OPTION VALUE="Brick5" >Brick5</OPTION>
<OPTION VALUE="Brick6">Brick6</OPTION>
<OPTION VALUE="Brick7">Brick7</OPTION>
</SELECT>

Säg nu att användaren skriver "Stefan" i VarFirstName fältet och "Andersson" i VarLastName fältet och sedan väljer Brick2, Brick4 och Brick6 i multiselecten och sedan submittar, då är tanken att den ska söka på användare med Namnet "Stefan Andersson" som ligger i Brick2, Brick4 eller Brick6.

Hur gör man detta i ASP samt SQL (SP) ?

Medlem sedan dec. 20025 483 inlägg
#2

Bland flera lösningar:

varFirstName = "Stefan"
varLastName  = "Andersson"
varCombined  = varFirstName & " " & varLastName
varLikeStr = ""
for each opt in request.form("Brick")
    varLikeStr = varLikeStr & varCombined & " like '%" & opt & "%' or "
next
if varLikeStr <> "" then varLikeStr = left(varLikeStr,len(varLikeStr)-4)

response.write varLikeStr
Medlem sedan dec. 19996 721 inlägg
#3

Stored Procedures är direkt olämpliga för frågor med flervärdesparametrar och/eller dynamiska frågor, så min starkaste rekommendation är att man håller sig ifrån SP för sådant. Om någon SP-religiös chef kräver att du använder SP så kan du lösa det genom att låta SP:n ha en drös med extra inparametrar, eller sätta ihop värdena till en kommaseparerad lista (med extra komman i början och slutet) och använda en fråga i stil med:

....
WHERE 
@commastring LIKE '%,Brick1,%' AND Brick1=@firstname + ' ' + @lastname
OR
@commastring LIKE '%,Brick2,%' AND Brick2=@firstname + ' ' + @lastname
OR
@commastring LIKE '%,Brick3,%' AND Brick3=@firstname + ' ' + @lastname
....

Men, som sagt, Stored Procedures är optimerade för anrop som inte är särskilt föränderliga, så undvik dem gärna i detta fall.

Medlem sedan mars 2003772 inlägg
#4

Ni missförstod nog vad jag var ute efter.
Det berodde nog på min dåliga förklaring.

Låt mig förklara igen.

Säg nu att användaren skriver "Stefan" i VarFirstName fältet och "Andersson" i VarLastName fältet och sedan väljer Brick2, Brick4 och Brick6 i multiselecten och sedan submittar, då är tanken att den ska söka på "Stefan" i Firstname kolumnen, "Andersson" i LastName kolumnen och "Brick2", "Brick4" eller "Brick6" i Brick kolumnen.

Jag vill helst använda mig av en SP eftersom jag redan gjort en SP som är klar då jag får med själva multiselect biten.

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)