Frågan 19 juli 2001 12:50 #1 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
------------------
Adde
P PatrikB Medlem sedan mars 2000 2 836 inlägg 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
------------------
*Det tar sig sa han som hade eld i håret*
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.
------------------
Adde
P PatrikB Medlem sedan mars 2000 2 836 inlägg 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
------------------
*Det tar sig sa han som hade eld i håret*
[Redigerat av PatrikB den 19 jul 2001]
Nu får jag felmeddelande:
Inkompatibla typer: 'UBound'
------------------
Adde
L LarsG Medlem sedan dec. 2000 12 464 inlägg For I = 0 To UBound(arrsokProdukt)
------------------
essentitia preter non sans multiplicandum
Ändrade
For I = 0 To UBound(sokProdukt)
till
For I = 0 To UBound(arrsokProdukt)
men den hittar inte efter två ord
------------------
Adde
L LarsG Medlem sedan dec. 2000 12 464 inlägg If I > 0 Then
sqlString = sqlString & "OR produkt_namn LIKE '%" & arrsokProdukt(i) & "%' "
Else
sqlString = sqlString & " produkt_namn LIKE '%" & arrsokProdukt(i) & "%' "
End If
------------------
essentitia preter non sans multiplicandum
Tack nu fungerar det bra.
Måste lära mig array. verkar ju gå att lösa mycket med det.
------------------
Adde
P PatrikB Medlem sedan mars 2000 2 836 inlägg 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
------------------
*Det tar sig sa han som hade eld i håret*
P PatrikB Medlem sedan mars 2000 2 836 inlägg 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
------------------
*Det tar sig sa han som hade eld i håret*
[Redigerat av PatrikB den 19 jul 2001]
Herman Medlem sedan maj 2001 431 inlägg 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 :)
------------------
Sub Avlusa(strDebug)
Response.Write vbCrLf & "<HR>" & vbCrLf & strDebug & vbCrLf & "<HR>" & vbCrLf
Response.Flush
End Sub
Var kan man hitta information om det.
------------------
Adde
P PatrikB Medlem sedan mars 2000 2 836 inlägg 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
------------------
*Det tar sig sa han som hade eld i håret*
Herman Medlem sedan maj 2001 431 inlägg dä förståss. Men jag tänkte mer en altavista funktion där man kan använda både + å - å frassökning.
------------------
En eller annan godbit från pannan
E emission Medlem sedan dec. 1999 6 721 inlägg http://cgi.webforum.nu/wf/Forum11/HTML/000405.html
Ska snygga upp den koden nu under semestern... :)
R RDL Medlem sedan mars 2001 344 inlägg 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
%>
Herman Medlem sedan maj 2001 431 inlägg Snyggt emission!
Ska flukta lite på koden innan jag gömmer mig för natten :)
------------------
En eller annan godbit från pannan