26. juli 2002 - 02:27Der er
14 kommentarer og 4 løsninger
Hvilke tegn kan
Jeg bruge til at lave en søgning med?
Jeg har lånt en søgefunktion af ASP.dk og har prøvet at udvide den lidt. Jeg vil gerne have den til at søge på feks vægt hvor det feks er max 80 kg. Hvordan gør jeg det?
Jeg har lavet den som nedenunder men jeg får alle fra DB vist. Hvordan laver jeg mine kriterier for hvor meget og hvor lidt der må komme med?
<% ' Henter værdien fra soeg.htm strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("search.htm") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users WHERE" strSQL = strSQL & " (alder LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (starsign LIKE '%" & strKeyword1 & "%')" strSQL = strSQL & " OR (sex LIKE '%" & strKeyword2 & "%')" strSQL = strSQL & " OR (lookfor LIKE '%" & strKeyword3 & "%')" strSQL = strSQL & " OR (vagt LIKE '%" & strKeyword4 & "%')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("dating.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" Response.Write "<table border=1>" Response.Write "<tr><th>Alder</th><th>Stjernetegn</th><th>Køn</th><th>Søger</th><th>vægt</th></tr>" Do While Not rs.EOF Response.Write "<tr><td>" & rs("alder") & "</td>" Response.Write "<td>" & rs("starsign") & "</td>" Response.Write "<td>" & rs("sex") & "</td>" Response.Write "<td>" & rs("lookfor") & "</td>" Response.Write "<td>" & rs("vagt") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter os myConn.Close Set myConn = Nothing %>
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
<% ' Henter værdien fra soeg.htm strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("search.htm") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users WHERE" strSQL = strSQL & " (alder LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (starsign LIKE '%" & strKeyword1 & "%')" strSQL = strSQL & " OR (sex LIKE '%" & strKeyword2 & "%')" strSQL = strSQL & " OR (lookfor LIKE '%" & strKeyword3 & "%')" strSQL = strSQL & " OR (vagt LIKE '" & strKeyword4 & "')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("dating.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" Response.Write "<table border=1>" Response.Write "<tr><th>Alder</th><th>Stjernetegn</th><th>Køn</th><th>Søger</th><th>vægt</th></tr>" Do While Not rs.EOF Response.Write "<tr><td>" & rs("alder") & "</td>" Response.Write "<td>" & rs("starsign") & "</td>" Response.Write "<td>" & rs("sex") & "</td>" Response.Write "<td>" & rs("lookfor") & "</td>" Response.Write "<td>" & rs("vagt") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter os myConn.Close Set myConn = Nothing %>
' Opbygger en dynamisk SQL streng strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users WHERE" strSQL = strSQL & " (alder LIKE '%" & strKeyword & "%')" if strKeyword1 <> "" Then strSQL = strSQL & " OR (starsign LIKE '%" & strKeyword1 & "%')" end if if strKeyword2 <> "" Then strSQL = strSQL & " OR (sex LIKE '%" & strKeyword2 & "%')" end if if strKeyword3 <> "" Then strSQL = strSQL & " OR (lookfor LIKE '%" & strKeyword3 & "%')" end if if strKeyword4 <> "" Then strSQL = strSQL & " OR (vagt LIKE '%" & strKeyword4 & "%')" end if
Er ikke sikker på om det er det der er problemet, men du kan da prøve...
Ovennævnte kan sikkert ikke løse problemet 100%. Når du vil begrænse søgningen på alder skal du ikke anvende OR men AND
Her er en måde at opbygge SQL-sætningen på der samtidig sikre at kun de indtastede søgeord anvendes. (Det gør tobby's også - men kræver at første søgeord er udfyldt.)
<% strSQL = ""
sub AddSqlOr(sKeyWord, sField) if sKeyWord <> "" then if strSQL = "" then strSQL = " (" & sField & " LIKE '%" & sKeyword & "%')" else strSQL = strSQL & " OR (" & sField & " LIKE '%" & sKeyword & "%')" end if end if end sub
if strKeyword4 <> "" Then if strSQL = "" then strSQL = "(vagt < " & strKeyword4 & ")" else strSQL = "(vagt < " & strKeyword4 & ") AND (" & strSql & ")" end if end if
if strSql <> "" then strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users WHERE " & strSQL else strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users" end if
Response.Write(strSql) ' Udskriv SQL-sætningen %>
Ovennævnte sætning vil finde alle dem der matcher et eller flere af søgeordene (strKeyWord til strKeyWord3) - men vil kun vise dem der samtidig har en alder der er mindre end strKeyWord4 hvis det er udfyldt.
coltau har fuldstændig ret i sin kommentar vedr. AND/OR. Dit oprindelige statement vil finde et match, hvis bare ét af kriterierne passer.
Men jeg vil tilføje at du bør overveje dine datatyper, for at få bedre performance i dine søgninger. Den mest ineffektive for før søgning får du ved at anvende LIKE og du gør ikke andet.
Ved eks. at ændre vægt til en heltals datatype, vil du kunne lave eks. =, <, >, <> og between på vægten. Da alle vægte vel er opgivet i kg, bør det være unødvendigt at lagre den som eks. "80 kg". Det vil være bedre blot at lagre den som den nummeriske værdi 80.
Et andet eksempel: Med mindre sex eks. indeholder S/M, straight m.m. el.lign. bør du overveje at kontrollere for et eksakt match med =. Indeholder den eks. M/K, M/F, Mand/Kvinde el.lign. bør du lave en WHERE Sex = 'M' fremfor LIKE.
Synes godt om
Slettet bruger
26. juli 2002 - 12:42#6
HAr prøvet det af og fik onde tanker da jeg læsete tmceu´s indlæg.. Har lavet lidt om på det http://www.vi2.dk/ultra/testmappe/search.htm Jeg har valgt at bruge radiob til at vælge med og fravalgt starsign, men... Hvad hedder en radiobutton inde i asp.. Skal lige siges at jeg har brugt mange timer på at søge efter noget på nettet uden held.. Jeg har brugt coltau´s kode og lavet lidt om i det.. Koden til asp ligger ude på linket som viser searchsiden. .. Ja jeg ved jo ikke bedre så jeg kaldte de radiobuttons s1 og s2
En dropdown (og radiobuttons) får du fat på via dens navn som alle øvrige felter i en form. Eks. vil Request.Form("s1") give dig værdien af din mand/kvinde dropdown.
Synes godt om
Slettet bruger
26. juli 2002 - 12:54#8
jamen hvis det bare er det må det da også virke og det gør det ikke.. Den skriver bare "SELECT alder, sex, lookfor, vagt FROM users" og det fatter jeg slet ikke. Jeg mener jeg er begyndt at fatte lidt af det men ligefrem det.. nej nej
Jamen det er fordi du ikke får overført værdierne fra formen til de variabler du bruger i den kode du viser i linket. Kig eks. bare på strKeyword4, den får aldrig nogen værdi :-)
Synes godt om
Slettet bruger
26. juli 2002 - 13:26#10
Okay jeg er kørt surt i det.. Det vil sige at jeg skal sætte et felt mere ind som har navnet keyword4 og som angir vægt. Prøver lige om det hjælper
Synes godt om
Slettet bruger
26. juli 2002 - 13:30#11
Kan sgu ikk gennemskue det. Gi mig et klue..
Synes godt om
Slettet bruger
26. juli 2002 - 14:00#12
Har fundet ud af at hvis jeg fjerner den nederste linie i aspkoden else strSQL = "SELECT alder, sex, lookfor, vagt FROM users" Så skriver den ikke "SELECT alder, sex, lookfor, vagt FROM users" For så skriver siden slet ikke noget.. Hjææælp
Når du submitter din form, får du værdierne over i Request.Form("s1"), Request.Form("s2") o.s.v.. Havde du brugt METHOD="GET" i din form, ville de i stedet være i eks. Request.QueryString("s1").
Da alle operationer i din kode foregår på variablerne str.... skal du have flyttet værdierne over i disse i starten af koden. Eks. str
Har du slået et for stort brød op ? Sorry, den måtte jeg bare lige af med :-)
Synes godt om
Slettet bruger
26. juli 2002 - 16:23#16
Både ja og nej. Jeg har det sådan at jeg nok skal finde ud af det engang men utålmodigheden lurer også. Ligenu kan jeg ikke se skoven for bare træer :-)
sub AddSqlOr(sKeyWord, sField) if sKeyWord <> "" then if strSQL = "" then strSQL = " (" & sField & " LIKE '%" & sKeyword & "%')" else strSQL = strSQL & " OR (" & sField & " LIKE '%" & sKeyword & "%')" end if end if end sub
if strKeyword4 <> "" Then if strSQL = "" then strSQL = "(vagt < " & strKeyword2 & ")" else strSQL = "(vagt < " & strKeyword2 & ") AND (" & strSql & ")" end if end if
if strSql <> "" then strSQL = "SELECT alder, sex, lookfor, vagt FROM users WHERE " & strSQL else strSQL = "SELECT alder, sex, lookfor, vagt FROM users" end if
Response.Write(strSql) ' Udskriv
Synes godt om
Slettet bruger
03. august 2002 - 21:18#18
Lukker Q, intet duer
Synes godt om
Ny brugerNybegynder
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.