Avatar billede renewester Nybegynder
20. december 2000 - 08:09 Der er 14 kommentarer og
1 løsning

Søgning på flere felter

Jeg har \"lånt\" en variant af følgende script her på eksperten, men der mangler en lille detalje.

Scriptet skal gøre det muligt at hente søgekriterier fra en form med 3 felter (ligesom på f.eks. krak.dk)

Her er scriptet:

brand = Request.Form(\"brand\")
product = Request.Form(\"product\")
searchstring = Request.Form(\"searchstring\")
blnSearch = false

strSQL = \"SELECT * FROM images \"

for each item in Request.Form
    If item <> \"\" then
        blnSearch = true
    End if   
Exit for

next

If blnSearch = true then
    strSQL = strSQL & \"WHERE \"
End if

\'Søg på BRAND
If brand <> \"\" then
    strSQL = strSQL & \"colBrand=\'\" & brand & \"\' \"
End if

\'Søg på PRODUCT
If product <> \"\" then
    strSQL = strSQL & \"colProduct=\'\" & product & \"\' \"
End if

Søg på FRITEKST
If searchstring <> \"\" then
    strSQL = strSQL & \"searchstring LIKE \'%\" & searchstring & \"%\'\"
End if
----------------

SQL strengen ser sådan ud:

SELECT * FROM imagebank WHERE colBrand=\'space\' colProduct=\'ting1\'

På en eller anden måde skal jeg have den til at se om der er flere items (og evt. hvor mange) i søgekriterierne, og så sætte \"AND\" ind imellem, så SQL forespørgslen bliver rigtig.

Er der nogen der har de gyldne ord til dette?
:)

Avatar billede jens Nybegynder
20. december 2000 - 08:37 #1
SELECT * FROM imagebank WHERE colBrand=\'space\' AND colProduct=\'ting1\' AND osv.

Avatar billede renewester Nybegynder
20. december 2000 - 08:58 #2
Ja det er jeg klar over.

Jeg skal bare have den til selv at finde ud af om man har valgt at søge i ét eller flere felter. Hvis det er flere felter, skal den selv sætte \"AND\" ind imellem.

Det er sikkert bare en lille ting jeg mangler i scriptet.
Avatar billede jens Nybegynder
20. december 2000 - 08:58 #3
hvis du skrev hvorfor du afviser, så kunne man evt. hjælpe dig vidre.....
Avatar billede jens Nybegynder
20. december 2000 - 08:59 #4
hvordan er formen du får oplysninger fra ?? er det selectboks eller hvad
Avatar billede renewester Nybegynder
20. december 2000 - 09:01 #5
Ja, det er 2 tekstfelter og 1 combo.
Det betyder vist ikke noget for jeg bruger bare deres NAME property til at hente værdierne fra.


Avatar billede jens Nybegynder
20. december 2000 - 09:04 #6
Kunne du ikke lægge det ind i en if sætning ?

If Request.Form(\"product\") = \"\" AND request.Form(\"nogetandet\") = \"\" Then

Select from bla.

Elseif

osv.

Eller er det for bøvlet
Avatar billede renewester Nybegynder
20. december 2000 - 09:11 #7
Jeg tror det bliver for bøvlet. Der må være en anden smart måde at gøre det på. Måske kombineret med de \"items\" den jo selv cykler igennem.
Avatar billede jens Nybegynder
20. december 2000 - 09:13 #8
okey, god fornøjelse ;-)
Avatar billede mkjeldsen Nybegynder
20. december 2000 - 09:20 #9
Hej
Jeg har med gode resultater brugt følgende fritekstsøgning. Den kan ændres til at søge på de felter du ønsker.

<%
Dim Connect, Query, TabelNavn, SoegKriterie

Set Connect = Server.CreateObject(\"ADODB.Connection\")

SoegKriterie = Request.QueryString (\"Text\")

TabelNavn = \"profiltbl\"

Connect.Open \"medlemskartotek\"

set Query = Connect.Execute (\"SELECT * FROM \" & TabelNavn & \" WHERE HoldNavn like \'%\" & SoegKriterie & \"%\' OR ForNavn like \'%\" & SoegKriterie & \"%\' OR EfterNavn like \'%\" & SoegKriterie & \"%\' OR Adresse like \'%\" & SoegKriterie & \"%\' OR PostNummer like \'%\" & SoegKriterie & \"%\' OR By like \'%\" & SoegKriterie & \"%\' OR TelefonNummer like \'%\" & SoegKriterie & \"%\' OR Email like \'%\" & SoegKriterie & \"%\' OR Foedselsdato like \'%\" & SoegKriterie & \"%\' OR IndmeldDato like \'%\" & SoegKriterie & \"%\'\")


%>

Mogens
Avatar billede renewester Nybegynder
20. december 2000 - 09:40 #10
Tak for dit svar, men det er ikke helt det jeg er ude efter. Dit script søger på ravl og krat, bare et af felterne indeholder et af ordene.

Jeg vil gerne have mulighed for at indskrænke søgningen, sådan så hvis man har udfyldt 2 felter, så skal BEGGE de ord indgå i søgningen.

Det script jeg bruger opfylder næsten mit behov, men der er kun en mindre detalje der gør, at den ikke ved om der bliver søgt på flere felter, og så selv sætte AND ind imellem variablerne.

Jeg har nu sat 60 point på højkant...

Avatar billede simony Nybegynder
20. december 2000 - 14:35 #11
Du kan gøre det, at du sætter et kriterie ind, uanset om feltet er udfyldt eller ej. Prøv fx. følgende stump kode:

\' Et kriterie, der altid er sandt
true_statement = \"(1=1)\"

\'Søg på BRAND
If brand <> \"\" then
    strSQL = strSQL & \"colBrand=\'\" & brand & \"\' \"
else
    strSQL = strSQL & true_statement
end if

\'Søg på PRODUCT
If product <> \"\" then
    strSQL = strSQL & \" AND colProduct=\'\" & product & \"\' \"
else
    strSQL = strSQL & \" AND \" & true_statement
end if
   
\'Søg på FRITEKST
If searchstring <> \"\" then
    strSQL = strSQL & \" AND searchstring LIKE \'%\" & searchstring & \"%\'\"
else
    \' Den sidste er principielt ikke nødvendig
    strSQL = strSQL & \" AND \" & true_statement
end if

Altså: Hvis feltet ikke er udfyldt indsætte der blot (1=1) - og man kan roligt sætte AND imellem alle tre.
Avatar billede simony Nybegynder
20. december 2000 - 14:48 #12
Ovenstående var et af mine første indlæg i dette system. Det var naturligvis ment som et svar.
Avatar billede renewester Nybegynder
20. december 2000 - 14:52 #13
Jeg har prøvet at sætte scriptet ind, og strengen ser således ud:

SELECT * FROM imagebank colBrand=\'SpeedFire\' AND (1=1) AND (1=1)

Den returnerer nu ingenting. Den er ikke så glad for de (1=1) statements :(



Avatar billede renewester Nybegynder
20. december 2000 - 14:54 #14
Undskyld!! Jeg har jo glemt at sætte en WHERE clause ind.  Nu kører det!

Mange tak for din hjælp :-)



Avatar billede simony Nybegynder
20. december 2000 - 15:08 #15
En lille kommentar:
Mit kodeforslag er ikke just en pæn løsning. Fx. vil udvidelser til yderligere kriterier kræve nærlæsning af koden.
I stedet bør man lave en mere generel løsning. Følgende giver et eksempel på en struktur, der kan anvendes (kræver bla. at man tilgår en ekstra attribut for feltnavnet i dit input felt):

strSQL = \"SELECT * FROM images where (1=1) \"
for each item in Request.Form
    If item <> \"\" then
        strSQL = strSQL & \" AND \" item.fieldname & \"=\" & item.value
    End if   
Exit for

Ovenstående kan udvides til også at håndtere \"like\" m.m.
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