logo

哈达波斯网|专注网站

ASP

ASP排序上移下移的问题解决方法

ASP  2018/5/25 8:33:31  管理员  

asp中的排序改变向上移动和向下移动的问题。也算是一种算法吧。这里我就拿access举例了。

这个是正常的数据库结构


idtitlepx
1第一项目0
2第二项目0
3第三项目0
4第四项目0


id 是 自动的,title 是文本,px 是整数型,展示的时候是通过px 来展示的 order by px desc 倒叙 

也就是说 px 越大 越靠前。越小越靠后。那么上面这个 基础的数据库是排序不了的。因为都是0 所以排序不了


那么正常排序的结构是这样的。


idtitlepx
1第一项目100
2第二项目50
3第三项目20
4第四项目10


举例:如果这里我们要移动排序 id=2的向上移动的话。那么就首先要获得他的上一条的排序也就是上面所看到的id=1的排序


那么这里我定义下 id=1的px 是 UpPx 那么 id=2向上移动的算法就是

id2的px


px=px+(UpPx-px)+1

这样就向上移动了最终得出的数据就是


idtitlepx
1第一项目100
2第二项目101
3第三项目20
4第四项目10


如果展示的话就是



idtitlepx
2第二项目101
1第一项目100
3第三项目20
4第四项目10



向下移动是这样的。

算法跟上移差不多。不过是减法

px=(px-(DonPx-px))-1



idtitlepx
1第一项目100
2第二项目99
3第三项目20
4第四项目10




算法基本知道。核心的。那么有个重点不得不说下。这里很容易产生混乱

就是你需要获取当前id 的排序 然后在通过排序去看你上一条,和下一条的 排序


shang=当前id的px  sql="select px From "&tab&" where Id="&id&""


上一条

sql="select px From "&tab&" where px>"&shang&" order by px asc"


下一条

sql="select px From "&tab&" where px<"&shang&" order by px desc"



根据上述是一种方法 下面是另外一个叫做替换移动法


就是获取当前id的 上下篇的id和排序。



获取上级px 和id


向上移动的话,替换当前id的px 为上级px

然后更新上级px 为当前id的px


下移也同样具体代码可以参考如下。不多说:

<%

act=request("act")
id=request("Check")'选择的id
if act<>"" then
	tab="ExperimentApplyTable"'数据库的表
	'=============链接数据库
	set conn=server.CreateObject("adodb.connection")
	conn.provider="microsoft.jet.oledb.4.0"
	conn.open server.MapPath("/data.mdb")
		'=========判断传递过来的id不能为空获取上下排序
	if id <>"" then'

		set rs = Server.CreateObject("adodb.recordset") 
		sql="select AT_id From "&tab&" where Id="&id&""
		rs.open sql,conn,1,1
		if rs.recordcount>0 then
			shang=rs("AT_id")
		end if
		rs.close
		set rs = nothing

		set rs = Server.CreateObject("adodb.recordset") 
		sql="select AT_id,id From "&tab&" where AT_id<"&shang&" order by AT_id desc"
		rs.open sql,conn,1,1
		if rs.recordcount>0 then
			upid=rs("id")
			up=rs("AT_id")
		end if
		rs.close
		set rs = nothing
		
		set rs = Server.CreateObject("adodb.recordset") 
		sql="select AT_id,id From  "&tab&" where AT_id>"&shang&" order by AT_id asc"
		rs.open sql,conn,1,1
		if rs.recordcount>0 then
			donid=rs("id")
			don=rs("AT_id")
		end if
		rs.close
		set rs = nothing		  

	else
		'报错!!!!!!!!
		call ok("传输的id有问题",Request.ServerVariables("HTTP_REFERER"))
	end if

	'=========判断传递过来的按钮value
	if act="up" then'上移
		if up<>"" then
			  set rs = Server.CreateObject("adodb.recordset") 
			  sql="select AT_id from  "&tab&" where Id="&id&" order by AT_id desc"
			  rs.open sql,conn,1,3
				if rs.recordcount>0 then
					ispx=rs("AT_id")
					rs("AT_id")=up
					rs.update
				end if
			  rs.close
			  set rs = nothing
			  
			  set rs = Server.CreateObject("adodb.recordset") 
			  sql="select AT_id from  "&tab&" where Id="&upid&" order by AT_id desc"
			  rs.open sql,conn,1,3
				if rs.recordcount>0 then
					rs("AT_id")=ispx
					rs.update
				end if
			  rs.close
			  set rs = nothing

		end if
	    call ok("上移成功",Request.ServerVariables("HTTP_REFERER"))
	elseif act="down" then
		if don<>"" then
			set rs = Server.CreateObject("adodb.recordset") 
			sql="select AT_id from  "&tab&" where Id="&id&" order by AT_id desc"
			rs.open sql,conn,1,3
			if rs.recordcount>0 then
				dipx=rs("AT_id")
				rs("AT_id")=don
				rs.update
			end if
			rs.close
			set rs = nothing
			
			set rs = Server.CreateObject("adodb.recordset") 
			sql="select AT_id from  "&tab&" where Id="&donid&" order by AT_id desc"
			rs.open sql,conn,1,3
			if rs.recordcount>0 then
				rs("AT_id")=dipx
				rs.update
			end if
			rs.close
			set rs = nothing
		end if
	    call ok("下移成功",Request.ServerVariables("HTTP_REFERER"))
	end if
	'关闭数据
	conn.close
	set conn=nothing
end if
'=====================
'对话框 
'ok(url,str)
'=====================
sub ok(str,url)
html="<script type='text/javascript'>window.document.location.href='"&url&"';"
html=html&"alert('"&str&"');"
html=html&"</script>"
response.Write(html)
response.End()
end sub
%>


网站首页  | 最新公告  | 漏洞修补  | 网站模板  | 知识文档  | 与我联系
Copyright © 2015 jlasp.com All Rights Reserved.
哈达波斯网|专注网站 版权所有
地址:吉林省吉林市昌邑区 联系QQ:383612004 联系人:董先生
未经本站授权,禁止复制或建立镜像,内容仅用于学习参考!
ICP备案号:吉ICP备15000891号-1 | 

吉公网安备 22020202000301号