同表中记录位置移动问题?求解

cnhzlyg 2007-04-06 02:46:27
问题描述:
例如数据库有一表test中 有字段:ID user address
表现在WEB页面时读出记录为:

姓名 地址 操作
————————————————————
张三 张三家 【编辑】=ID(传递ID用于操作)

李四 李四家 【编辑】

王五 王五家 【编辑】
————————————————————

现在【编辑】李四这条记录,选择操作【将其移到张三之前】编辑完之后,刷新页面WEB显示为:

姓名 地址 操作
————————————————————
李四 李四家 【编辑】

张三 张三家 【编辑】

王五 王五家 【编辑】
————————————————————

问题是在数据库中如何操作记录比较合理,意思就是将李四移动到张三之前,其它记录的位置不变。这个过程用SQL语句怎么实现,需要另添加其它字段来控制么?


知道的给指导下,先谢谢了。
...全文
198 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
rookie_one 2007-04-06
  • 打赏
  • 举报
回复
有问题再给我发消息~:)
cnhzlyg 2007-04-06
  • 打赏
  • 举报
回复
这个结果是执行过没错的么?

感觉。。。有点问题哦。。本地没装数据库。。。给分先。。。

^_^^_^
rookie_one 2007-04-06
  • 打赏
  • 举报
回复
或者写成存储过程,
create procedure pro_order(@t1 int,@t2 int)--@t1是你的目的位置,@t2是你的原始位置
as
declare @str varchar(50)
select @str=B from #A where A=@t2
update #A set A=A+1 from #A where A between @t1 and @t2
update #A set A=@t1 from #A where A=@t2+1 and B=@str
go


exec pro_order 2,4--这里是调用,输入被调动的记录的目的位置和原始位置

select * from #A order by A
---------
1 a
2 d
3 b
4 c
5 e
6 f

rookie_one 2007-04-06
  • 打赏
  • 举报
回复
明白了,这样就好了

drop table #A
create table #A (A int,B varchar(50))
insert #A
select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'d' union all
select 5,'e' union all
select 6,'f'



declare @t1 int
declare @t2 int
declare @str varchar(50)
set @t1=2
set @t2=4
select @str=B from #A where A=@t2
update #A set A=A+1 from #A where A between @t1 and @t2
update #A set A=@t1 from #A where A=@t2+1 and B=@str


select * from #A order by A

--------------
A B
1 a
2 d
3 b
4 c
5 e
6 f
cnhzlyg 2007-04-06
  • 打赏
  • 举报
回复
这样只实现了交换啊。。。如果是交换的话。那原来的排序就乱了啊。


比如。。要实现第4条移到2之前。。
参考数据:
1 A
2 B
3 C
4 D
按你上述的方法,修改后应该是
1 A
2 D
3 C
4 B

我的意思是。将4移到2之前其它的顺序不变,
也就是显示应该是

1 A
2 D
3 B
4 C 也就是2以及之后的记录将在原来的4往后移位了。。。
rookie_one 2007-04-06
  • 打赏
  • 举报
回复
刚才笔误,传这句sql即可,select * from #A order by A
-------------
A B
1 a
2 b
3 d
4 c

rookie_one 2007-04-06
  • 打赏
  • 举报
回复
那就按照第二种情况update

create table #A (A int,B varchar(50))
insert #A
select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'d'
select * from #A order by B

不改变id顺序,只把他们的值颠倒一下
declare @t1 varchar(50)
declare @t2 varchar(50)
select @t1=B from #A where A=3
select @t2=B from #A where A=4
update #A set B=@t2 from #A where A=3
update #A set B=@t1 from #A where A=4


select * from #A order by B
--------------
1 a
2 b
4 c
3 d


这样你在web页面时应该就能提前了
cnhzlyg 2007-04-06
  • 打赏
  • 举报
回复
第1种如果用查询语句怎么查呢?
ORDERBY 的话也只能是按某个字段排列啊!!!
这里的1,2,3,4是自动的ID...

我只要实现输出WEB页面的时候显示的位置有改变,就是原来4在3之前。。。
rookie_one 2007-04-06
  • 打赏
  • 举报
回复
你想要的是那种效果?:
1

修改前
1 a
2 b
3 c
4 d

修改后
1 a
2 b
4 d
3 c
这样就没有必要了,查询时候用sql语句查找即可了

2

修改前
1 a
2 b
3 c
4 d

修改后

1 a
2 b
3 d
4 c

cnhzlyg 2007-04-06
  • 打赏
  • 举报
回复
老乌龟大侠。。。能给参考么。。。之前的大侠那方法不能解决我想要的结果。。

cnhzlyg 2007-04-06
  • 打赏
  • 举报
回复
查看某条记录是没问题啊。现在就是需要实现 记录的任意位置 移动啊 。。。比如整个表中有20条记录。我想把第15条记录移动到第10条记录之前。

也就是原来显示为:
1---第一条记录
.
.
20——最后1条记录。。中间都是按顺序排列

现在显示为
1——第一条记录
.
9
15——这里是移动后的记录。该位置就是要求的第10条之前
10
.
.20——最后1条记录。。其它记录的顺序不变

这样的移动怎么实现呢。。。就ORDERBY 能实现么???
dawugui 2007-04-06
  • 打赏
  • 举报
回复
rookie_one(流氓会武术,谁都挡不住) ( )

可以新增一个字增id列
alter table [tablename] add id int identity(1,1)

但是。。。我觉得根本没有必要做lz这样的所谓顺序的改变,因为当你察看的时候,需要什么顺序完全可以同过查询语句来展现阿

支持这个.
rookie_one 2007-04-06
  • 打赏
  • 举报
回复
order by 或者where

就可以完成
rookie_one 2007-04-06
  • 打赏
  • 举报
回复
可以新增一个字增id列
alter table [tablename] add id int identity(1,1)

但是。。。我觉得根本没有必要做lz这样的所谓顺序的改变,因为当你察看的时候,需要什么顺序完全可以同过查询语句来展现阿
cnhzlyg 2007-04-06
  • 打赏
  • 举报
回复
有遇到过问题的么。。。。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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