我用asp做的搜索程序,在本网站搜关键字第一页显示正常,点第2页就不行了,请求援助?
来源:
时间:2024-08-17 13:25:08
热度:
我用asp做的搜索程序,在本网站搜关键字第一页显示正常,点第2页就不行了,请求援助?【专家解说】:比较复杂,可以支持多种逻辑符,包括 + - and or 空格等,并且根据需要随便
【专家解说】:比较复杂,可以支持多种逻辑符,包括 + - and or 空格等,并且根据需要随便增加。可以根据条件选择在那个表中搜索,对速度也做了优化,可以说是很快的。当然因为是以前写的,存在不少毛病。存储过程中用到几乎所有sql server的特性,如光标(记录集分页)等。好了,不吹了,自己看程序吧。
asp 函数
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 " , "-")
@#初始化变量,以使下面的循环进行
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)
@#-------------------------------空格处理完毕-------------------------------------------------
@#-------------------处理单双引号-----------------------------------------------------
@#首先将单引号替换为双引号
m_strDest = replace ( m_strDest , chr(39) , chr(34))
@#置一个初值以使循环进行
m_intBeginPos = 1
m_intEndPos =1
m_strHead = ""
m_strTail = ""
do while m_intBeginPos <> 0 and m_intEndPos <> 0
@#如果发现双引号,则记下开始位置,查找下一个双引号
m_intBeginPos = instr(m_strDest , chr(34))
if m_intBeginPos <> 0 then @#如果找到第一个引号
call print("[AnalyseKeyword()]:第一个引号出现的位置:" + cstr(m_intBeginPos))
m_intEndPos = instr(m_intBeginPos + 1 , m_strDest ,chr(34))
if m_intEndPos <> 0 then @#如果找到第二个引号
call print("[AnalyseKeyword()]:第二个引号出现的位置:" + cstr(m_intEndPos))
@#将整个字符串按引号分隔成三段
call print ("[AnalyseKeyword()]:处理引号m_strDest = " + m_strDest)
m_strHead = left(m_strDest , m_intBeginPos - 1)
call print ("[AnalyseKeyword()]:处理引号m_strHead = " + m_strHead)
m_strMiddle = mid(m_strDest , m_intBeginPos + 1 , m_intEndPos - m_intBeginPos - 1)
call print ("[AnalyseKeyword()]:处理引号m_strMiddle = " + m_strMiddle)
m_strTail = right(m_strDest , len(m_strDest) - m_intEndPos)
call print ("[AnalyseKeyword()]:m_strTail = " + m_strTail)
@#如果在引号中有+号则作为字符处理,暂时替换成其他字符
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()]:处理引号完毕后m_strDest = " + m_strDest)
@#-------------------------------引号处理完毕-------------------------------------------------
@#-------------------------------处理多个加号及加号两边的空格问题-----------------------------
@#处理多个加号的问题,遇到多个加号则认为是字符串,而不是逻辑符
m_strDest = replace (m_strDest , "+++" ,"|||")
m_strDest = replace (m_strDest , "++" , "||")
call print ("[AnalyseKeyword()]:处理多个减号完毕后m_strDest = @#" + m_strDest + "@#")
@#处理加号两边的空格
m_strDest = replace(m_strDest , " +" , "+")
m_strDest = replace(m_strDest , "+ " , "+")
m_strDest = replace(m_strDest , " + " , "+")
call print ("[AnalyseKeyword()]:处理减号两边的空格完毕后m_strDest = @#" + m_strDest + "@#")
@#-------------------------------处理加号完毕-----------------------------
@#-------------------------------处理多个减号及减号两边的空格问题-----------------------------
@#处理多个减号的问题,遇到多个减号则认为是字符串,而不是逻辑符
m_strDest = replace (m_strDest , "---" ,"~~~")
m_strDest = replace (m_strDest , "--" , "~~")
call print ("[AnalyseKeyword()]:处理多个减号完毕后m_strDest = @#" + m_strDest + "@#")
@#处理减号两边的空格
m_strDest = replace(m_strDest , " -" , "-")
m_strDest = replace(m_strDest , "- " , "-")
m_strDest = replace(m_strDest , " - " , "-")
call print ("[AnalyseKeyword()]:处理加号两边的空格完毕后m_strDest = @#" + m_strDest + "@#")
@#-------------------------------处理减号完毕-----------------------------
@#------------------------------处理字符串两头的加减号问题-----------------
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
%>
存储过程
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 --商业机会库
"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 --商业机会
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
-
开养殖场怎么获得土地 有哪些程序 另动物粪便怎么处理2024-08-17
-
锅炉工作程序2024-08-17
-
天然气从开采到可使用要经过哪些加工程序?2024-08-17
-
如图是利用多种生物工程技术获得转基因牛的基本操作流程,请分析回答:(1)在基因工程的操作程序中,基2024-08-17
-
开一家养猪场 致富··需要哪些程序和步奏? 预算需要多少 ··?当然从小型的现做起··小路怎么找额?2024-08-17
-
请问关于取得HSE工程师资格认证需要走哪些程序。2024-08-17
-
异步风力发电机仿真程序2024-08-17
-
要设立混凝土加工厂需要什么程序,有没有特殊要求2024-08-17
-
焦化项目设计建设的程序2024-08-17
-
哪位能提供下读取mdb数据,存入mysql数据库中的c、c++程序啊2024-08-17
-
毛坯房的装修程序?2024-08-17
-
循环流化床半干法烟气脱硫设计计算程序 公式全,给分能发吗?2024-08-17
-
我想知道做资料从基础到峻工的程序,2024-08-17
-
现在哪些省份允许汽车使用甲醇汽油?有没有具体措施?做销售的话需要走什么程序?2024-08-17