Lite mera kod @nders:
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "clanglobe2"
dim i,j,mQuery,mQueryArr,mAndArr,mNotArr,mOrArr,mSQL,mWhere
alt = Request.Form("alt")
'grunddelarna i frågan beroende på valt alternativ
IF alt = "news" then
mSQL="SELECT nyheter.id, nyheter.rubrik, nyheter.artikel, nyheter.skribent, users.nick FROM nyheter INNER JOIN users ON nyheter.skribent = users.id WHERE "
mWhere="(artikel LIKE '%%') OR (rubrik LIKE '%%') OR (skribent LIKE '%%') OR (users.nick LIKE '%%')"
Page="News"
elseif alt = "users" then
mSQL="SELECT users.id, klaner.namn AS klannamn, land.namn as landnamn, users.nick, users.city, users.info FROM users INNER JOIN klaner ON klaner.id = users.klanid INNER JOIN land ON users.country = land.id WHERE "
mWhere="(users.nick LIKE '%%') OR (klaner.namn LIKE '%%') OR (users.info LIKE '%%') OR (land.namn LIKE '%%') OR (users.city LIKE '%%')"
Page="Users"
end if
'sökfältets värde
mQuery=request("search")
sokstrang=mquery
'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 ")
if page = "News" then
mQuery=mQuery & " ORDER BY nyheter.rubrik asc limit 100"
else page = "Users" then
mQuery=mQuery & " ORDER BY users.nick asc limit 100"
end if
'frågan är klar! Ligger i mQuery
set rs=Connection.execute(mQuery)
Söker gör jag genom att skriva t.ex. Anders AND NOT Malmö. Jag har även testat att skriva Anders "AND NOT" Malmö,
funkar inte då heller. I vilket fall som helst, jag vill ju att man bara ska behöva skriva som i exempel ett,
alternativt byta ut and not mot ett minustecken och and mot ett plustecken... annars söka på alla ord..
Jag tror du fattar vad jag menar
Börjar bli lagom less på det här nu :l
//G8