Du kan ju splitta upp söksträngen till en array, dvs att varje ord som ges i sökfältet kommer att få en egen position i arrayen.
Sedan loopar du igenom arrayen och bygger sql-frågans where sats dynamiskt
cya,
PatrikB
18 svar · 330 visningar · startad av Addeladde
Jag håller på att bygga en sökfunktion för produkter. Den ska söka efter produktnamnet. Jag har redan gjort en sökfunktion som fungerar hyffsat.
Set prodRS = Server.CreateObject( "ADODB.Recordset" )
prodRS.ActiveConnection = Con
prodRS.CursorType = adOpenStatic
prodRS.Pagesize = 6
sqlString = "SELECT produkt_id, produkt_bild_liten, produkt_namn, produkt_pris, produkt_info_liten " &_
"FROM Produkter " &_
"WHERE produkt_namn LIKE '%" & sokProdukt & "%' " &_
"AND produkt_status=1 " &_
"ORDER BY produkt_namn"
prodRS.Open sqlString
prodRS.AbsolutePage = pg
Om man skriver två ord i sökformuläret så söker den bara efter det första ordet.
Exempel om en produkt finns inlaggd i databasen med namnet "Compaq Ipaq"
så söker man efter "Handator Ipaq" då hittar den inget.
Hur gör man OBS jag använder SQL-Server
Du kan ju splitta upp söksträngen till en array, dvs att varje ord som ges i sökfältet kommer att få en egen position i arrayen.
Sedan loopar du igenom arrayen och bygger sql-frågans where sats dynamiskt
cya,
PatrikB
Okej det svaret känner man igen använd array. Något jag måste ta mig tid att lära mig lite bättre.
Men jag har lite bråtom just nu så det vore jätte schyst om du kunde hjälpa mig med koden.
ok, ngt liknande:
sqlString = "SELECT produkt_id, produkt_bild_liten, produkt_namn, produkt_pris, produkt_info_liten " &_
"FROM Produkter " & _
"WHERE ("
arrSokProdukt = Split(sokProdukt)
For I = 0 To UBound(sokProdukt)
If I > 0 Then
sqlString = sqlString & "OR produkt_namn LIKE '%" & sokProdukt & "%' "
Else
sqlString = sqlString & " produkt_namn LIKE '%" & sokProdukt & "%' "
End If
Next
sqlString = sqlString & ") AND produkt_status=1 ORDER BY produkt_namn"
kom ihåg ... otestad kod *ler*
cya,
PatrikB
For I = 0 To UBound(arrsokProdukt)
Ändrade
For I = 0 To UBound(sokProdukt)
till
For I = 0 To UBound(arrsokProdukt)
men den hittar inte efter två ord
If I > 0 Then
sqlString = sqlString & "OR produkt_namn LIKE '%" & arrsokProdukt(i) & "%' "
Else
sqlString = sqlString & " produkt_namn LIKE '%" & arrsokProdukt(i) & "%' "
End If
som sagt ... sa juuu att det var otestad kod .... kilpp och klister ....
fast va bra att det ordnade sig till slut *ler o skäms*
cya,
PatrikB
För att göra den mer avancerad så kan man ju fixa till så att om en användare lägger till ett - före ett ord så ska inga poster med det ordet sökas eller om ett + är satt framför ett ord så måste det ordet följa med i alla sökningar.
cya,
PatrikB
precis och sedan kanska man vill söka på just: "Compaq Ipaq"
och inte: Compaq ELLER Ipaq
och inte: Compaq OCH Ipaq
Vore snyggt om någon kunde lägga upp ett sådant script här på webforum
Var kan man hitta information om det.
Att söka efter den exakta frasen är en lätt grej att göra med tex en checkbox som får klickas i om sökningen ska mathca exakt det som står i sökfältet.
Bara att kolla om den är iklickad eller inte. Är den iklickad skippar man spliten till arrayen.
cya,
PatrikB
dä förståss. Men jag tänkte mer en altavista funktion där man kan använda både + å - å frassökning.
http://cgi.webforum.nu/wf/Forum11/HTML/000405.html
Ska snygga upp den koden nu under semestern...
Skulle inte orginalet sett ut så här?? hehe =)
busted!!
<%
sqlString = "SELECT product_id, product_picture, product_name, product_briefDesc " &_
"FROM Products " &_
"WHERE product_status = 1 " &_
"AND ( product_name LIKE '%" & searchFor & "%' " &_
"OR product_briefDesc LIKE '%" & searchFor & "%') " &_
"ORDER BY product_name "
SET RS = Con.Execute( sqlString )
IF NOT RS.EOF AND searchFor <> "" THEN
%>
Snyggt emission!
Ska flukta lite på koden innan jag gömmer mig för natten
Vad menar du RDL