Du menar alltså att den automatiskt skall söka på ALLA ord?
Tror du får ändra OR till AND nedan:
'tejpa ihop en färdig fråga
mQuery=join(mQueryArr," [b]OR[/b] ")
Kanske på fler ställen, ögnade bara snabbt igen nu ;)
2 svar · 239 visningar · startad av Lazerzubb
Så här ser den kod ut som hanterar sökningen (ja tack, vem det nu var jag fick det av) men hur gör man så att alla mellanslag blir som att det är det + i sökningen?
Som när man söker med Google eller någon annan sökmotor så behövs det bara ett mellanrum istället för ett +.
<%
Response.Cachecontrol="Public"
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=search.mdb"
dim i,j,mQuery,mQueryArr,mAndArr,mNotArr,mOrArr,mSQL,mWhere
'grunddelarna i frågan
mSQL="SELECT * FROM search1 WHERE "
mWhere="(country LIKE '%%') OR (province LIKE '%%') OR (city LIKE '%%')"
'sökfältets värde
mQuery=request.form("fsearch")
'loopa igenom allt och ersätt mellanslag inom citattecken med chr(1).
'Denna bit går att göra med reguljära uttryck också
for i=1 to len(mQuery)
mAsc=asc(mid(mQuery,i,1))
if mAsc=34 then
mCount=mCount+1
blnInQ=not blnInQ
else
if blnInQ and mAsc=32 then
mQuery=left(mQuery,i-1) & chr(1) & mid(mQuery,i+1)
end if
end if
next
'om antalet citattecken är ojämnt ignoreras de helt
if mCount mod 2 <> 0 then
mQuery=replace(mQuery,chr(1)," ")
end if
'ta bort citattecknen
mQuery=replace(mQuery,chr(34),"")
'ersätt mellanslag med chr(0) och mellanslag
mQuery=chr(0) & replace(mQuery," "," " & chr(0))
'splitta upp i en array
mQueryArr=split(mQuery," ")
'skapa arrayer för AND, AND NOT och OR.
'chr(0) gör det nu möjligt att matcha endast början på strängarna
mAndArr=filter(mQueryArr,chr(0) & "+",true)
mQueryArr=filter(mQueryArr,chr(0) & "+",false)
mNotArr=filter(mQueryArr,chr(0) & "-",true)
mQueryArr=filter(mQueryArr,chr(0) & "-",false)
'återskapa strängarna (ersätt chr(1) med mellanslag) och
'skapa WHERE-satser i arrayerna
for i=0 to ubound(mAndArr)
mAndArr(i)=replace(mAndArr(i),chr(1)," ")
mAndArr(i)=replace(mWhere,"%%","%" & mid(mAndArr(i),3) & "%")
next
for i=0 to ubound(mNotArr)
mNotArr(i)=replace(mNotArr(i),chr(1)," ")
mNotArr(i)=replace(mWhere,"%%","%" & mid(mNotArr(i),3) & "%")
next
for i=0 to ubound(mQueryArr)
mQueryArr(i)=replace(mQueryArr(i),chr(1)," ")
mQueryArr(i)=replace(mWhere,"%%","%" & mid(mQueryArr(i),2) & "%")
next
'tejpa ihop en färdig fråga
mQuery=join(mQueryArr," OR ")
if mQuery<>"" then
mQuery="(" & mQuery & ")"
if ubound(mAndArr) > -1 then mQuery=mQuery & " AND "
end if
mQuery=mQuery & join(mAndArr," AND ")
if mQuery<>"" and ubound(mNotArr) > -1 then mQuery=mQuery & " AND NOT "
mQuery=mSQL & mQuery & join(mNotArr," AND NOT ")
set rs=Connection.execute (mQuery)
%>
Du menar alltså att den automatiskt skall söka på ALLA ord?
Tror du får ändra OR till AND nedan:
'tejpa ihop en färdig fråga
mQuery=join(mQueryArr," [b]OR[/b] ")
Kanske på fler ställen, ögnade bara snabbt igen nu ;)
Säg att du söker på:
Sverige+ Öland+ Bornholm
Hur gör jag då för att man bara ska behöva skriva
Sverige Öland Bornholm
Och inte behöva skriva + ???
Men det ska även fungera om man skriver + i strängen.
(det verkade inte fungera bengan)