Avatar billede fætterguf Nybegynder
04. marts 2002 - 00:54 Der er 5 kommentarer og
1 løsning

Avanceret søgning

G'aften

Jeg sidder og roder med en søgefunktion, som ikke virker helt efter hensigten.

Funktionen skal bruges til en shop, som har flere varekategorier. Jeg har brug for at kunne vælge hvilke kategorier, jeg vil søge i, og definere et søgeord....og det går også fint.

For at lave en "ren" søgning pr. kategori, definerer jeg kategori-ID'erne som et array og looper den omkring min SQL-søgning. Det virker fint hvis jeg vælger under 5 kategorier går det normalt hurtigt (ca. 1-2 sek.), men hvis jeg vælger flere laver den time-out.

Hvem kan sige hvad der er galt, eller lave et alternativ????

Her er min kode:


-------------------------------------
catSearchStr = Replace(catSearchStr," ","")
catSearchArr = Split(catSearchStr, ",")
catSearchStr = ""

for i = 0 to ubound(catSearchArr)

catId = catSearchArr(i)

    SQL = ""
    SQL = SQL & "SELECT * FROM productCatalog WHERE"
    SQL = SQL & " (categoryId = "&catId&" AND vareName like '%"&searchWord&"%') "
    SQL = SQL & "OR"
    SQL = SQL & " (categoryId = "&catId&" AND vareTeaser like '%"&searchWord&"%') "
    SQL = SQL & "OR"
    SQL = SQL & " (categoryId = "&catId&" AND vareDesc like '%"&searchWord&"%') "
    Set RS = Connect.Execute(SQL)


    Do While NOT RS.BOF AND NOT RS.EOF

    itemSearchStr = itemSearchStr & "<td valign=""top"">"&FormatText("breadNormal",noStore&RS("VareName"),0,"<b>","</b>","pad")&"</td>"

    noStore = ""

    RS.Movenext
    Loop

next
-------------------------------------

"catSearchStr" kan f.eks. se således ud

28, 35, 40....o.s.v.




Avatar billede rou Nybegynder
04. marts 2002 - 08:50 #1
Behold den kommaseparerede streng af kategorier..
og brug så denne SQL istedet:

"SELECT * FROM productCatalog WHERE
CategoryID IN ("& catSearchStr &") AND (
vareName LIKE '%"& searchWord &"%' OR vareTeaser LIKE '%"& searchWord &"%' OR vareDesc LIKE '%"& searchWord &"%' OR)"

- Rou
Avatar billede rou Nybegynder
04. marts 2002 - 08:51 #2
Prøv altid at begrænse dig selv til een forespørgsel. At loope igennem på den måde, hvor du laver en søgning som indeholder LIKE's, vil altid være meget langsom. Især LIKE er belastende.
Avatar billede coltau Juniormester
04. marts 2002 - 08:52 #3
Du kan lave udtrækket i en og samme sætning - prøv nedenstående kode.

SQL = "SELECT * FROM productCatalog WHERE ("
for i = 0 to ubound(catSearchArr)
  catId = catSearchArr(i)
  if (i > 0) then
    SQL = SQL & " or "
  end if 
  SQL = SQL & " categoryId=" & catID
next
SQL = SQL & ") and ("
SQL = SQL & "vareName like '%" & searchWord & "%' "
SQL = SQL & " or vareTeaser like '%"&searchWord&"%' "
SQL = SQL & " or vareDesc like '%"&searchWord&"%') "

Inden du prøver at udføre sætningen kan du jo udskrive den i stedet for - så kan du jo se om SQL-sætningen omfatter det du har behov for.

Response.Write(SQL)
Avatar billede fætterguf Nybegynder
04. marts 2002 - 11:06 #4
rou > Jeg havde også på fornemmelsen, at det var mere klodset end det behøvede at være - men så er det jo godt, at der er så mange eksperter på eksperten.dk. Tak for hjælpen, det virkerde perfekt!
Avatar billede rou Nybegynder
04. marts 2002 - 11:17 #5
En fornøjelse at kunne hjælpe, selvom du ikke havde behøvet at være så rundhåndet med pointene :)
Avatar billede coltau Juniormester
04. marts 2002 - 14:48 #6
Får du også Type Mitchmatch i linie 2 eller er det kun mig. ?

"SELECT * FROM productCatalog WHERE
CategoryID IN ("& catSearchStr &") AND (
vareName LIKE '%"& searchWord &"%' OR vareTeaser LIKE '%"& searchWord &"%' OR vareDesc LIKE '%"& searchWord &"%' OR)"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester