智慧掩盖真相
天之道,不争而善胜。
博客园
社区
首页
联系
管理
随笔- 109 文章- 24 评论- 1039
MS SqlServer 2000交换排序的一种方法
可能我说的交换排序还有点歧义。看下面的图片
就是要实现这样的排序。
首先数据库结构得具备3个字段
ID , Name , OrderNum
排序的规则为,首先按OrderNum倒序排列,然后如果OrderNum 相同则按ID的倒序排列。
Sql语句为
Select
*
From
Sorts
Order
By
OrderNum
Desc
, ID
Desc
当点向上箭头的时候,表示要把当前的记录和上面的记录交换,实现排序。同样点向下箭头的时候也一样。
假设我们当需要把上图中ID为1的记录和ID为3的记录交换。假设是把1向上和3交换(点1的上箭头)。
如果,ID3的OrderNum 为2,ID1的OrderNum 为1,那么直接交换OrderNum 就可以。看来是如此,但是真的可以么?
假设数据如下:
ID Name OrderNum
4 .... 2
3 .... 2
6 ...... 1
.........
上面的数据是可能的,假如把ID6的OrderNum 换成是2就跑第一个去了!
这里就不详细介绍各种可能了,我介绍下我采用的方法。
我使用存储过程来解决这个问题,需要传递的参数为:1、是up(上箭头)还是down(下箭头),2、选择记录的id,3、选择记录的order。
<a href="?order=up&id=<%# Eval("ID") %>&type=<%# Eval("OrderNum ") %>">↑</a>
|
<a href="?order=down&id=<%# Eval("ID") %>&type=<%# Eval("OrderNum ") %>">↓</a>
存储过程为
CREATE
PROCEDURE
NewsSortOrder
@order
char
(
20
),
@id
int
,
@type
int
AS
declare
@nowid
int
--
搜索上一条或下一条的ID
if
@order
=
"up"
--
上升
begin
set
@nowid
=
(
select
Top
1
ID
From
Sorts
Where
OrderNum
>=
@type
And
ID
<>
@id
Order
By
OrderNum
ASC
)
if
isnumeric
(
@nowid
)
=
1
--
假如为数字的话
begin
if
(
Select
OrderNum
From
Sorts
Where
ID
=
@nowid
)
=
@type
--
假如两记录type相同的情况
begin
Update
Sorts
Set
OrderNum
=
OrderNum
+
1
Where
ID
=
@id
Or
OrderNum
>
@type
--
该记录type+1并且他的上面的记录除了上一条type全部加一
end
else
begin
--
开始调换
Update
Sorts
Set
OrderNum
=
(
Select
OrderNum
From
Sorts
Where
ID
=
@nowid
)
Where
ID
=
@id
Update
Sorts
Set
OrderNum
=
@type
Where
ID
=
@nowid
end
end
end
if
@order
=
"down"
--
下降
begin
set
@nowid
=
(
select
Top
1
ID
From
Sorts
Where
OrderNum
<=
@type
And
ID
<>
@id
Order
By
OrderNum
Desc
)
if
isnumeric
(
@nowid
)
=
1
--
如果为数字
begin
if
(
Select
OrderNum
From
Sorts
Where
ID
=
@nowid
)
=
@type
--
假设两记录type相同
begin
Update
Sorts
Set
OrderNum
=
OrderNum
-
1
Where
ID
=
@id
Or
OrderNum
<
@type
--
该记录type-1并且他的下面的记录除了下一条type全部减一
end
else
begin
--
开始调换
Update
Sorts
Set
OrderNum
=
(
Select
OrderNum
From
Sorts
Where
ID
=
@nowid
)
Where
ID
=
@id
Update
Sorts
Set
OrderNum
=
@type
Where
ID
=
@nowid
end
end
end
GO
以上是.Net2.0 + SqlServer 2000 调试
http://birdshover.cnblogs.com
posted @ 2006-08-11 00:05
Birdshover
阅读(341)
评论(2)
编辑
收藏
所属分类:
ASP.Net2.0
发表评论
回复
引用
查看
#1楼
2006-08-11 09:26 |
阿呆乐
说下我自己见解,从实现上来说这种更改排序是没有问题的,可是从UE来说对用户是不友好的。我以前写过类似这样的,但是后来改成可以直接修改排序号的。因为如果有100条记录但你想把最后一个放到第一个的时候是很不合理的。呵呵,个人意见
回复
引用
查看
#2楼
2006-12-14 22:49 |
Jason Cui
嗯,做成可以托动的就更好了。现在这个技术已经很成熟了。
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
ASP.Net中控件的EnableViewState属性
您可能不知道的ASP.Net2.0小技巧
MS SQL Server 2000安装不成功的原因
做快乐的程序员 - 在淘宝网的一次讲座
SqlServer自增列的问题
请问VS2008+SqlServer2005作开发的话,这个配置行不行?
目前有关ASP.Net的认证都有哪些?哪个最具有权威性,水平比较高?
SqlServer2005客户端装不上怎么办?
相关链接:
所属分类的其他文章:
VS2008 SP1之“动态数据 Web 应用程序”——管理数据库太容易了!
Asp.Net 128 错误——"编译器失败,错误代码为 128"
用IHttpModule解决输入中文地址乱码问题(二)
用IHttpModule解决输入中文地址乱码问题(一)
MVC框架的地址重写(一)——MVC中默认的地址重写
ASP.Net MVC框架配置与分析
.Net 3.5(LINQ,AJAX) Web简易聊天室 源码
自定义WebControls.Panel,让div自由说话
Configuration类在网页实现对web.config的修改(可能是2.0一个bug)
MS SqlServer 2000交换排序的一种方法
最新IT新闻:
51.COM技术副总裁邵辉跳槽百度
Mono 2.0终于到来
百度任命李一男担任首席技术官
Google Knol 开始尝试有声版
12日电脑与人进行世纪对话 可思考机器或诞生
公告
网名: yurow birdshover
无术 夕阳轨迹 等
本名: 谢平
籍贯: 江苏溧阳
位置: 上海
职业: C# & 打字
联系方式: 19999351(QQ)
<
2006年8月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我管理的小组
Lucene.Net
我参加的小组
.NET 3.x
设计模式
读书(Books)
WinForms
自学编程
博客园发展小组
山西DotNet俱乐部
单元测试
ZZK支持小组
Asp.Net MVC
我参与的团队
上海.NET俱乐部(0/2249)
山西DotNet俱乐部(0/291)
我的标签
lucene.net(5)
IHttpModule(2)
中文地址乱码(2)
中文分词(2)
Highlighter(1)
分词(1)
mvc(1)
控制台(1)
控制台应用程序(1)
关闭操作(1)
随笔分类
(85)
.Net language and other(13)
(rss)
ASP.Net2.0(16)
(rss)
Desin Patterns(1)
(rss)
lucene.net(4)
(rss)
Lucene.Net 2.3.1(19)
(rss)
Thinking about develop(9)
(rss)
WinForm(12)
(rss)
非技术(5)
(rss)
数据(6)
(rss)
随笔档案
(83)
2008年9月 (13)
2008年8月 (13)
2008年7月 (7)
2008年5月 (2)
2008年3月 (6)
2008年1月 (6)
2007年12月 (4)
2007年11月 (2)
2007年10月 (6)
2007年7月 (1)
2007年4月 (1)
2007年2月 (1)
2007年1月 (4)
2006年10月 (1)
2006年8月 (2)
2006年7月 (2)
2006年6月 (6)
2006年5月 (6)
文章分类
(27)
.Net 2.0
(rss)
.Net 3.0(1)
(rss)
F#(1)
(rss)
WinForm实验室(9)
(rss)
触摸C# Web开发(2)
(rss)
解读Lucene.Net(5)
(rss)
数独理论研究(1)
(rss)
搜索引擎开发相关(3)
(rss)
摘录资料(5)
(rss)
文章档案
(49)
2008年8月 (6)
2008年7月 (7)
2008年4月 (1)
2008年3月 (2)
2008年2月 (1)
2007年11月 (1)
2007年7月 (11)
2007年6月 (14)
2006年6月 (4)
2006年5月 (2)
收藏夹
(1)
我的收藏(1)
(rss)
我的其它博客
yurow
我的C++博客
我的java博客
我的百度空间
积分与排名
积分 - 196175
排名 - 173
最新评论
1. re: db4objects 7.4应用笔记
@Birdshover
原来如此,受教了。 (Doho)
2. re: Lucene.Net 2.3.1开发介绍 —— 三、索引(七)
--引用-------------------------------------------------- Birdshover: @Doho 没有关系 ----------------------... (Doho)
3. re: NLuke版本更新信息
--引用-------------------------------------------------- Birdshover: @zzg @Doho 下一个版本将会解决这个问题 -------... (Doho)
4. re: NLuke版本更新信息
@zzg
@Doho
下一个版本将会解决这个问题
(Birdshover)
5. re: db4objects 7.4应用笔记
@Doho
两个东西不是一个概念的,db4objects 它数据本身就是以对象方式存储的,是面向对象的数据库。LINQ To SQL说白了还是ORM的东西,是给关系型数据库用的。 (Birdshover)
6. re: Lucene.Net 2.3.1开发介绍 —— 三、索引(七)
@Doho
没有关系 (Birdshover)
7. re: Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)
@Doho
==# (Birdshover)
8. re: Lucene.Net 2.3.1开发介绍 —— 阅读索引
@Doho
国庆回家去了,不能上网,呵呵 (Birdshover)
9. re: 详解for循环(各种用法)
@allanswolf
foreach遍历集合的时候是不能对集合进行修改的。
这是数据结构上的差异造成的。 (Birdshover)
10. re: Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
学习了啊 (leige)
11. re: 详解for循环(各种用法)
@Birdshover 请教个问题: //row: DataRow //sDS: DataTable foreach(var row in sDS.Rows) { row.Delete(... (allanswolf)
12. re: Lucene.Net 2.3.1开发介绍 —— 阅读索引
老谢,国庆也放假啦?怎么不更新了,我一直在你的博客逛,给你留下了不少问题哦,希望能与你一起讨论。 (Doho)
13. re: 话说搜索引擎分词
ICTCLAS是中科院出的分词组件,还是很有权威的,在项目中可以考虑使用这个组件,问题是它的词库怎么建立,建立符合自己行业相关的词库,这一点我现在在查找中,知道的朋友也说一说。 (Doho)
14. re: 基于.Net Framework 3.5的Lucene.Net 中文词组匹配分词器
其实基于词库的分词策略 最关心的还是词库怎么建立、维护。 (Doho)
15. re: Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
放一张图片上来,对Lucene 的整个流程也有一个清晰的了解:
(Doho)
16. re: Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)
写得很好,这个系列的每一篇我都看完了,大部分在每篇随笔之后都有留言,楼主应该很忙吧?这家伙很懒,一个回复也没留下:)
(Doho)
17. re: Lucene.Net 2.3.1开发介绍 —— 三、索引(七)
在Apache主页上有一个“DistributedSearch/ ”,应该是分页式应用,但不是一个完整的项目,请问楼主一个问题,这个跟Lucene 分页式索引有什么关系。 ... (Doho)
18. re: Lucene.Net 2.3.1开发介绍 —— 三、索引(六)
这4 条经验值得借鉴。 (Doho)
19. re: Lucene.Net 2.3.1开发介绍 —— 三、索引(四)
很详细的document.SetBoost(boost);
楼主很有探索精神,佩服哦
是否还有:Field.SetBoost(x); (Doho)
20. re: Lucene.Net 2.3.1开发介绍 —— 三、索引(五)
我认为可以对Lucene的评分公式做一个 Matlab分析,就可以得出一个直接的理论曲线,又直观。 (Doho)