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.
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]
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..
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