调整排序的SQL语句怎么写的?

viphk 2010-12-23 05:00:15
在后台调整网页排版,要制作一个上移与下移功能,表中有个记录排序数值的字段
如果表中有N条数据记录,随便点击一条记录往上移,或者往下移,如果往上移则把原来上面这条记录的排序值换成被往上移记录的排序值,被往上移记录的排序值换成原上面这条记录的排序值,下移刷相反处理。
例如:
ID     Name          pxid
4 我是中国人 2
5 我爱我们的国家 3
6 我是人民子弟兵 4

表中记录排序条件是按pxid顺序排列的
如果我把ID6往上移动,则把ID6的pxid值4换成ID5的pxid值3,则把ID5的pxid值3换成ID6的pxid值4
不知道我表达清楚了没有,
SQL语句不知道怎么下手,请老大们指点!
...全文
185 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogodiy 2010-12-24
  • 打赏
  • 举报
回复
这个在程序里直接操作更方便,选中记录后就用个变量记住这条记录当前的序号,然后每上移一次,序号-1,这条记录上面的记录序号就+1;下移类似,没必要用SQL语句来调整,不然每次都要和数据库联系,效率低,又麻烦。看你的要求每次移动不过是一条,那牵涉到的记录最多就是两条,用SQL太浪费了。
fu504224384 2010-12-23
  • 打赏
  • 举报
回复
我正在学这玩意儿,一嵌套就有点儿蒙!
viphk 2010-12-23
  • 打赏
  • 举报
回复
老大,不过用+1-1哦,因为排序的值不一定是并列的,ID5的排序值是3,但ID6的排序值有可能是10等等[Quote=引用 4 楼 maco_wang 的回复:]
SQL code

declare @table table (ID int,Name varchar(14),pxid int)
insert into @table
select 4,'我是中国人',2 union all
select 5,'我爱我们的国家',3 union all
select 6,'我是人民子弟兵',4

select * from @table orde……
[/Quote]
dawugui 2010-12-23
  • 打赏
  • 举报
回复
这个貌似用程序去做,用SQL语句不好做,帮顶.
叶子 2010-12-23
  • 打赏
  • 举报
回复

declare @table table (ID int,Name varchar(14),pxid int)
insert into @table
select 4,'我是中国人',2 union all
select 5,'我爱我们的国家',3 union all
select 6,'我是人民子弟兵',4

select * from @table order by pxid
/*
ID Name pxid
----------- -------------- -----------
4 我是中国人 2
5 我爱我们的国家 3
6 我是人民子弟兵 4
*/

--上移
--变量
declare @i int ;set @i=6

update @table set pxid=pxid-1 where ID=@i
update @table set pxid=pxid+1 where
id=(select max(id) from @table where id<@i )

select * from @table order by pxid
/*
ID Name pxid
----------- -------------- -----------
4 我是中国人 2
6 我是人民子弟兵 3
5 我爱我们的国家 4
*/
viphk 2010-12-23
  • 打赏
  • 举报
回复
是做一个动态的功能,客户可以随意调整

不用存储过程能实现吗
王向飞 2010-12-23
  • 打赏
  • 举报
回复
后台调整网页排版
既然是排版,用程序很容易解决。
王向飞 2010-12-23
  • 打赏
  • 举报
回复

--> 数据库版本:
--> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
--> 测试数据:account
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'account')
AND type in (N'U'))
DROP TABLE account
GO

---->建表
create table account([ID] int,[Name] varchar(14),[pxid] int)
insert account
select 4,'我是中国人',2 union all
select 5,'我爱我们的国家',3 union all
select 6,'我是人民子弟兵',4
GO



--> 查询结果
SELECT * FROM account order by case when ID = 6 then 0 else 1 end ,pxid
--> 删除表格
--DROP TABLE account

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧