我用asp做的搜索程序,在本網(wǎng)站搜關(guān)鍵字第一頁顯示正常,點(diǎn)第2頁就不行了,請(qǐng)求援助?
來源:新能源網(wǎng)
時(shí)間:2024-08-17 13:25:08
熱度:
我用asp做的搜索程序,在本網(wǎng)站搜關(guān)鍵字第一頁顯示正常,點(diǎn)第2頁就不行了,請(qǐng)求援助?【專家解說】:比較復(fù)雜,可以支持多種邏輯符,包括 + - and or 空格等,并且根據(jù)需要隨便
【專家解說】:比較復(fù)雜,可以支持多種邏輯符,包括 + - and or 空格等,并且根據(jù)需要隨便增加??梢愿鶕?jù)條件選擇在那個(gè)表中搜索,對(duì)速度也做了優(yōu)化,可以說是很快的。當(dāng)然因?yàn)槭且郧皩懙?,存在不少毛病。存?chǔ)過程中用到幾乎所有sql server的特性,如光標(biāo)(記錄集分頁)等。好了,不吹了,自己看程序吧。
asp 函數(shù)
function AnalyseKeyword(a_strSource)
dim m_strDest , m_intLoop
dim m_intBeginPos , m_intEndPos
dim m_strHead , m_strMiddle , m_strTail
m_strDest = a_strSource
@#------------------------------處理空格------------------------------------------------------
@#首先去掉頭尾空格
m_strDest = ltrim(rtrim(m_strDest))
@#將& , " and " 等替換成 +、 -、空格
m_strDest = replace(m_strDest , "&" , "+")
m_strDest = replace(m_strDest , " AND " , "+")
m_strDest = replace(m_strDest , " OR " , chr(32))
m_strDest = replace(m_strDest , " NOT " , "-")
@#初始化變量,以使下面的循環(huán)進(jìn)行
m_intBeginPos = 1
do while m_intBeginPos <> 0
m_intBeginPos = instr(m_strDest ,chr(32))
if m_intBeginPos <> 0 then @#如果找到空格
m_strHead = rtrim(ltrim(left ( m_strDest , m_intBeginPos )))
call print("[AnalyseKeyword()]:處理空格m_strHead = " + m_strHead)
m_strTail = rtrim(ltrim(right (m_strDest , len(m_strDest) - m_intBeginPos)))
call print("[AnalyseKeyword()]:處理空格m_strTail = " + m_strTail)
m_strDest = m_strHead + "*" + m_strTail
else
exit do
end if
loop
m_strDest = replace (m_strDest , "*" , chr(32))
call print("[AnalyseKeyword()]:處理空格完畢后m_strDest = " + m_strDest)
@#-------------------------------空格處理完畢-------------------------------------------------
@#-------------------處理單雙引號(hào)-----------------------------------------------------
@#首先將單引號(hào)替換為雙引號(hào)
m_strDest = replace ( m_strDest , chr(39) , chr(34))
@#置一個(gè)初值以使循環(huán)進(jìn)行
m_intBeginPos = 1
m_intEndPos =1
m_strHead = ""
m_strTail = ""
do while m_intBeginPos <> 0 and m_intEndPos <> 0
@#如果發(fā)現(xiàn)雙引號(hào),則記下開始位置,查找下一個(gè)雙引號(hào)
m_intBeginPos = instr(m_strDest , chr(34))
if m_intBeginPos <> 0 then @#如果找到第一個(gè)引號(hào)
call print("[AnalyseKeyword()]:第一個(gè)引號(hào)出現(xiàn)的位置:" + cstr(m_intBeginPos))
m_intEndPos = instr(m_intBeginPos + 1 , m_strDest ,chr(34))
if m_intEndPos <> 0 then @#如果找到第二個(gè)引號(hào)
call print("[AnalyseKeyword()]:第二個(gè)引號(hào)出現(xiàn)的位置:" + cstr(m_intEndPos))
@#將整個(gè)字符串按引號(hào)分隔成三段
call print ("[AnalyseKeyword()]:處理引號(hào)m_strDest = " + m_strDest)
m_strHead = left(m_strDest , m_intBeginPos - 1)
call print ("[AnalyseKeyword()]:處理引號(hào)m_strHead = " + m_strHead)
m_strMiddle = mid(m_strDest , m_intBeginPos + 1 , m_intEndPos - m_intBeginPos - 1)
call print ("[AnalyseKeyword()]:處理引號(hào)m_strMiddle = " + m_strMiddle)
m_strTail = right(m_strDest , len(m_strDest) - m_intEndPos)
call print ("[AnalyseKeyword()]:m_strTail = " + m_strTail)
@#如果在引號(hào)中有+號(hào)則作為字符處理,暫時(shí)替換成其他字符
m_strMiddle = replace(m_strMiddle , "+" , "|")
m_strDest = m_strHead + replace(rtrim(ltrim(m_strMiddle)) , chr(32) , "#") + m_strTail
else
exit do
end if
else
exit do
end if
loop
m_strDest = replace(m_strDest , chr(34) , "+")
call print ("[AnalyseKeyword()]:處理引號(hào)完畢后m_strDest = " + m_strDest)
@#-------------------------------引號(hào)處理完畢-------------------------------------------------
@#-------------------------------處理多個(gè)加號(hào)及加號(hào)兩邊的空格問題-----------------------------
@#處理多個(gè)加號(hào)的問題,遇到多個(gè)加號(hào)則認(rèn)為是字符串,而不是邏輯符
m_strDest = replace (m_strDest , "+++" ,"|||")
m_strDest = replace (m_strDest , "++" , "||")
call print ("[AnalyseKeyword()]:處理多個(gè)減號(hào)完畢后m_strDest = @#" + m_strDest + "@#")
@#處理加號(hào)兩邊的空格
m_strDest = replace(m_strDest , " +" , "+")
m_strDest = replace(m_strDest , "+ " , "+")
m_strDest = replace(m_strDest , " + " , "+")
call print ("[AnalyseKeyword()]:處理減號(hào)兩邊的空格完畢后m_strDest = @#" + m_strDest + "@#")
@#-------------------------------處理加號(hào)完畢-----------------------------
@#-------------------------------處理多個(gè)減號(hào)及減號(hào)兩邊的空格問題-----------------------------
@#處理多個(gè)減號(hào)的問題,遇到多個(gè)減號(hào)則認(rèn)為是字符串,而不是邏輯符
m_strDest = replace (m_strDest , "---" ,"~~~")
m_strDest = replace (m_strDest , "--" , "~~")
call print ("[AnalyseKeyword()]:處理多個(gè)減號(hào)完畢后m_strDest = @#" + m_strDest + "@#")
@#處理減號(hào)兩邊的空格
m_strDest = replace(m_strDest , " -" , "-")
m_strDest = replace(m_strDest , "- " , "-")
m_strDest = replace(m_strDest , " - " , "-")
call print ("[AnalyseKeyword()]:處理加號(hào)兩邊的空格完畢后m_strDest = @#" + m_strDest + "@#")
@#-------------------------------處理減號(hào)完畢-----------------------------
@#------------------------------處理字符串兩頭的加減號(hào)問題-----------------
if len(m_strDest) >= 3 then
m_strHead = left(m_strDest , 1)
m_strMiddle = mid(m_strDest , 2 , len(m_strDest) - 2)
m_strTail = right(m_strDest , 1)
if m_strHead = "+" or m_strHead = "-" then
m_strHead = ""
end if
if m_strTail = "+" or m_strTail = "-" then
m_strTail = ""
end if
m_strDest = m_strHead + m_strMiddle + m_strTail
end if
@#----------------------------處理完畢-------------------------------------
m_strDest = replace(m_strDest , "--" , "~~")
m_strDest = replace(m_strDest , "++" , "||")
m_strDest = replace(m_strDest , chr(32) , "@")
AnalyseKeyword = m_strDest
call print ("[AnalyseKeyword()]:全部處理完畢后m_strDest = @#" + m_strDest + "@#")
end function
%>
存儲(chǔ)過程
if exists (select * from sysobjects where id = object_id("up_ParseWordSearch"))
drop proc up_ParseWordSearch
go
create proc up_ParseWordSearch @a_strParseword varchar(255) ,
@a_strCategoryID varchar(255) ,
@a_intPosition tinyint ,
@a_intRowCount int
as
declare @m_strSqlCondition varchar(255) --Sql語句的條件部分
declare @m_strSqlSelect varchar(255) --Sql語句的選擇部分
declare @m_strSqlCategory varchar(100) --sql語句的分類部分
select @m_strSqlSelect
= case
when @a_intPosition = 4 then --商品庫
"select ProductID , @#Title@# = ProductName , @#Description@# = left(Description , 100) "
+ " from Product where "
when @a_intPosition = 5 then --商業(yè)機(jī)會(huì)庫
"select ID , Title ,@#Description@# = left(convert(varchar,content) , 100) "
+ " from BusinessChance where "
when @a_intPosition = 6 then --公司庫
"select CompanyID , @#Title@# = CompanyName , @#Description@# =left(Description , 100) "
+ " from Company where "
end
select @m_strSqlCategory
= case
when @a_strCategoryID <> "0" then " CategoryID like @#" + @a_strCategoryID + "%@# and "
else ""
end
select @m_strSqlCondition
= case
when @a_intPosition = 4 --商品
then "(ProductName like @#%" + @a_strParseWord + "%@#"
+ " or Description like @#%" + @a_strParseWord + "%@#"
+ " or ProducerName like @#%" + @a_strParseWord + "%@#) "
when @a_intPosition = 5 --商業(yè)機(jī)會(huì)
then "(Title like @#%" + @a_strParseWord + "%@#"
+ " or Keyword like @#%" + @a_strParseWord + "%@#) "
when @a_intPosition = 6
then "(CompanyName like @#%" + @a_strParseWord + "%@#"
+ " or Description @#%" + @a_strParseWord + "%@#) "
end
set rowcount @a_intRowCount
exec (@m_strSqlSelect + @m_strSqlCategory + @m_strSqlCondition)
set rowcount 0
go
-
新建豬舍的消毒程序2024-08-17
-
開養(yǎng)殖場(chǎng)怎么獲得土地 有哪些程序 另動(dòng)物糞便怎么處理2024-08-17
-
鍋爐工作程序2024-08-17
-
天然氣從開采到可使用要經(jīng)過哪些加工程序?2024-08-17
-
如圖是利用多種生物工程技術(shù)獲得轉(zhuǎn)基因牛的基本操作流程,請(qǐng)分析回答:(1)在基因工程的操作程序中,基2024-08-17
-
開一家養(yǎng)豬場(chǎng) 致富··需要哪些程序和步奏? 預(yù)算需要多少 ··?當(dāng)然從小型的現(xiàn)做起··小路怎么找額?2024-08-17
-
請(qǐng)問關(guān)于取得HSE工程師資格認(rèn)證需要走哪些程序。2024-08-17
-
異步風(fēng)力發(fā)電機(jī)仿真程序2024-08-17
-
要設(shè)立混凝土加工廠需要什么程序,有沒有特殊要求2024-08-17
-
焦化項(xiàng)目設(shè)計(jì)建設(shè)的程序2024-08-17
-
哪位能提供下讀取mdb數(shù)據(jù),存入mysql數(shù)據(jù)庫中的c、c++程序啊2024-08-17
-
毛坯房的裝修程序?2024-08-17
-
循環(huán)流化床半干法煙氣脫硫設(shè)計(jì)計(jì)算程序 公式全,給分能發(fā)嗎?2024-08-17
-
我想知道做資料從基礎(chǔ)到峻工的程序,2024-08-17
-
現(xiàn)在哪些省份允許汽車使用甲醇汽油?有沒有具體措施?做銷售的話需要走什么程序?2024-08-17