webForumDet fria alternativet

Avancerad sökning

18 svar · 304 visningar · startad av Addeladde

AddeladdeMedlem sedan jan. 20013 406 inlägg
#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

PatrikBMedlem sedan mars 20002 836 inlägg
#2

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*

AddeladdeMedlem sedan jan. 20013 406 inlägg
#3

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

PatrikBMedlem sedan mars 20002 836 inlägg
#4

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]

AddeladdeMedlem sedan jan. 20013 406 inlägg
#5

Nu får jag felmeddelande:

Inkompatibla typer: 'UBound'

------------------
Adde

LarsGMedlem sedan dec. 200012 464 inlägg
#6
For I = 0 To UBound(arrsokProdukt)

------------------
essentitia preter non sans multiplicandum

AddeladdeMedlem sedan jan. 20013 406 inlägg
#7

Ändrade

For I = 0 To UBound(sokProdukt)

till

For I = 0 To UBound(arrsokProdukt)

men den hittar inte efter två ord

------------------
Adde

LarsGMedlem sedan dec. 200012 464 inlägg
#8
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

AddeladdeMedlem sedan jan. 20013 406 inlägg
#9

Tack nu fungerar det bra.

Måste lära mig array. verkar ju gå att lösa mycket med det.

------------------
Adde

PatrikBMedlem sedan mars 20002 836 inlägg
#10

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*

PatrikBMedlem sedan mars 20002 836 inlägg
#11

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]

HermanMedlem sedan maj 2001431 inlägg
#12

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
AddeladdeMedlem sedan jan. 20013 406 inlägg
#13

Var kan man hitta information om det.

------------------
Adde

PatrikBMedlem sedan mars 20002 836 inlägg
#14

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*

HermanMedlem sedan maj 2001431 inlägg
#15

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

emissionMedlem sedan dec. 19996 721 inlägg
#16

http://cgi.webforum.nu/wf/Forum11/HTML/000405.html

Ska snygga upp den koden nu under semestern... :)

RDLMedlem sedan mars 2001344 inlägg
#17

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
%>

HermanMedlem sedan maj 2001431 inlägg
#18

Snyggt emission!
Ska flukta lite på koden innan jag gömmer mig för natten :)

------------------
En eller annan godbit från pannan

AddeladdeMedlem sedan jan. 20013 406 inlägg
#19

Vad menar du RDL

------------------
Adde

136 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)