webForumDet fria alternativet

Sql sats för sök-fråga.

11 svar · 405 visningar · startad av ConnyFox

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#1

jag har ett sökfält där man skriver in ett eller flera ord man vill söka efter, när man bara skriver in ett ord (t.ex volvo) är ju det hela enkelt :

MySQL = "select * from produkter where artikel LIKE ? ORDER BY '" & order & "'"

Men om man skriver in två ord, t.ex AMD Athlon så visas ju bara produkter som innehåller just detta, skriver man det i omvänt ordning, t.ex Athlon AMD så visas inte dessa och tvärt om, eller när orden man skriver in inte ligger brevid varandra så fungerar det inte heller.

Hur gör jag?

Tack på förhand!

Jesper TMedlem sedan nov. 20017 144 inlägg
#2

Du får göra ett script som loopar igenom alla sökord som skapar sql-satsen.

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#3

hmm hur då, finns det något exempel i någon tidigare tråd kanske?

PalleMedlem sedan apr. 20003 174 inlägg
#4

En variant som jag använde för länge sen, kan säkerligen
optimeras med det borde fungera för dig. :)

[red]strFieldName = "artikel"
strQuery = Replace(trim(Request.Form("foo")), "'", "''")

If InStr(strQuery, " ") Then
	arrQuery = Split(strQuery, " ")
	If IsArray(arrQuery) Then
		For i = 0 To UBound(arrQuery)
			strNewQuery = strNewQuery &" LIKE '%"& arrQuery(i) &"%' OR "& strFieldName
		Next
		strNewQuery = Left(strNewQuery, Len(strNewQuery)-(Len(strFieldName)+4))
	End If
Else
	strNewQuery = " LIKE '%"& strQuery &"%'"
End If

...

MySQL = "select * from produkter where "& strFieldName & strNewQuery &" ORDER BY '" & order & "'"[/red]
ConnyFoxMedlem sedan aug. 20011 087 inlägg
#5

skall testa den, tackar!

jag bara bytte ut OR mot AND så fungerade det

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#6

Ok en fråga till!
hur gör jag om jag vill att den skall göra detta fast kolla i två tabellfält - artikel och beskrivning
?

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#7

ingen som kan? :(

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#8

jag modifierade min kod lite så den ser ut såhär


strFieldName = "artikel"
strFieldName2 = "description"
strQuery = Replace(trim(Request("strSok")), "'", "''")

If InStr(strQuery, " ") Then
	arrQuery = Split(strQuery, " ")
	If IsArray(arrQuery) Then
		For i = 0 To UBound(arrQuery)
			strNewQuery = strNewQuery &" LIKE '%"& arrQuery(i) &"%' OR " & strFieldname2  &" LIKE '%"& arrQuery(i) &"%' AND "& strFieldName & ""
		Next
		strNewQuery = Left(strNewQuery, Len(strNewQuery)-(Len(strFieldName)+4))
	End If
Else
	strNewQuery = " LIKE '%"& strQuery &"%' OR " & strFieldname2  &" LIKE '%"& strQuery &"%'"
End If

MySQL = "select ID, artikel, artikelid, pris, lager from produkter where "& strFieldName & strNewQuery &" ORDER BY '" & order & "'"
set rs = connect.execute(mysql)

vilket ger mig en sql fråga som ser ut såhär ifall jag säker på "änglar 12":

select ID, artikel, artikelid, pris, lager from produkter where artikel LIKE '%änglar%' OR description LIKE '%änglar%' AND artikel LIKE '%12%' OR description LIKE '%12%' ORDER BY 'artikel'

Detta fungerar dock inte riktigt som det skall ;)
i detta fallet så visas ju artiklar som innehåller 12 även om inte änglar finns med osv..

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#9

Ingen som kan ta en titt på detta, gått flera dagar nu..
Om det inte går så vore ju det med bra o veta :D

PeeerMedlem sedan mars 20025 907 inlägg
#10

SQL-satsen borde se ut såhär

select ID, artikel, artikelid, pris, lager from produkter where 
(artikel LIKE '%änglar%' OR description LIKE '%änglar%') AND 
(artikel LIKE '%12%' OR description LIKE '%12%') ORDER BY 'artikel'

Sen hur funktionen som bygger upp sql-satsen ska se ut.. det får du fundera på själv :p

@ndersMedlem sedan juni 200032 969 inlägg
#11

Du måste gruppera dina villkor med parenteser runt dina AND-block eftersom du har OR mellan vissa villkor.

Om det svaret inte var tydligt nog så förstår man nog vad Peeer skriver. ;)

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#12

Perfekt, efter lite mekande fick jag det äntligen att fungera, visste att det antagligen var något så här enkelt, varje dag lär man sig något nytt :D

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