ConnyFoxMedlem sedan aug. 20011 087 inlägg 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 Du får göra ett script som loopar igenom alla sökord som skapar sql-satsen.
ConnyFoxMedlem sedan aug. 20011 087 inlägg hmm hur då, finns det något exempel i någon tidigare tråd kanske?
PalleMedlem sedan apr. 20003 174 inlägg 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 skall testa den, tackar!
jag bara bytte ut OR mot AND så fungerade det
ConnyFoxMedlem sedan aug. 20011 087 inlägg 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 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 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 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 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 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