webForumDet fria alternativet

Problem med avancerad sökmaskin

ASP

0 svar · 199 visningar · startad av AG

Medlem sedan mars 20001 266 inlägg
Frågan#1

En gång i tiden hjälpte emission mig med en avancerad sökmaskin, den hanterar "+" "-" "*" """" etc.
NU är saken den att jag försökte expandera den, den skulle söka av flera tabeller.

http://webforum.aleborg.com/forum/showthread.php?s=&threadid=38903

Jag tror Vide lyckades lösa detta problem i sitt sökscript:
http://webforum.aleborg.com/forum/showthread.php?
s=&threadid=12058&highlight=s%F6kmotor

Vänligen försök få detta att fungera i min följande kod:

mSQL="SELECT * FROM Titlar WHERE "

if CInt(request.QueryString("table")) = "1" then
mWhere="titel LIKE '%%' or forfattare LIKE '%%' or beskrivning LIKE '%%' or isbn LIKE '%%'"
end if

if CInt(request.QueryString("table")) = "2" then
mWhere="forfattare LIKE '%%'"
end if

if CInt(request.QueryString("table")) = "3" then
mWhere="isbn LIKE '%%'"
end if

if request.QueryString("search")<>"" then
mQuery=request.QueryString("search")
else
mQuery=request.QueryString("search")
end if
mOrigQuery=mQuery

Set rs = Server.CreateObject("ADODB.Recordset")

mSQL=MakeQuery(mQuery,mSQL,mWhere)

function MakeQuery(strSearch,strQuery,strWhere)
dim i,j,mQueryArr,mAndArr,mNotArr,mOrArr

for i=1 to len(strSearch)
mAsc=asc(mid(strSearch,i,1))
if mAsc=34 then
mCount=mCount+1
blnInQ=not blnInQ
else
if blnInQ and mAsc=32 then
strSearch=left(strSearch,i-1) & chr(1) & mid(strSearch,i+1)
end if
end if
next
if mCount mod 2 <> 0 then
strSearch=replace(strSearch,chr(1)," ")
end if
strSearch=replace(strSearch,chr(34),"")
strSearch=chr(0) & replace(strSearch," "," " & chr(0))

strSearchArr=split(strSearch," ")

mAndArr=filter(strSearchArr,chr(0) & "+",true)
strSearchArr=filter(strSearchArr,chr(0) & "+",false)
mNotArr=filter(strSearchArr,chr(0) & "-",true)
strSearchArr=filter(strSearchArr,chr(0) & "-",false)

for i=0 to ubound(mAndArr)
mAndArr(i)=replace(mAndArr(i),chr(1)," ")
mAndArr(i)=replace(strWhere,"%%","%" & replace(mid(mAndArr(i),3),"*","%") & "%")
next
for i=0 to ubound(mNotArr)
mNotArr(i)=replace(mNotArr(i),chr(1)," ")
mNotArr(i)=replace(strWhere,"%%","%" & replace(mid(mNotArr(i),3),"*","%") & "%")
next
for i=0 to ubound(strSearchArr)
strSearchArr(i)=replace(strSearchArr(i),chr(1)," ")
strSearchArr(i)=replace(strWhere,"%%","%" & replace(mid(strSearchArr(i),2),"*","%") & "%")
next

strSearch=join(strSearchArr," OR ")
if strSearch<>"" then
strSearch="(" & strSearch & ")"
if ubound(mAndArr) > -1 then strSearch=strSearch & " AND "
end if
strSearch=strSearch & join(mAndArr," AND ")
if strSearch<>"" and ubound(mNotArr) > -1 then strSearch=strSearch & " AND NOT "
strSearch=strQuery & strSearch & join(mNotArr," AND NOT ")

MakeQuery=strSearch
end function

Vänligen kan någon hjälpa så att den söker igenom samtliga kolumner.

Andreas

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)