帮忙写条查询语句

zhmjppp 2011-10-04 01:10:47

id name contents fid time
1 tom good! null 2010/01/01
2 jack very good! null 2010/01/02
3 frank thanks 1 2010/01/03
4 frank ok! 2 2010/01/04

一张留言表,不想另建留言回复表,初步设想成如上这样
id为自增列,fid对应为
最后的排列为 1 3 2 4
能做到吗?
...全文
103 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
D_DaiDai_D 2011-10-04
  • 打赏
  • 举报
回复
把fid列删除,alter table XX drop columns fid.
然后加fid列,alter table XX add columns fid.
然后再里面加数据咯。
AcHerat 元老 2011-10-04
  • 打赏
  • 举报
回复

create table tb(id int,[name] varchar(10),fid int,[time] datetime)
insert into tb
select 1,'tom',null,'2010/01/01' union all
select 2,'jack',null,'2010/01/02' union all
select 3,'frank',1,'2010/01/03' union all
select 4,'frank',2,'2010/01/04'
go

--2000
create function get_px(@id int)
returns varchar(1000)
as
begin
declare @ret varchar(1000)
declare @re table(id int,[level] int,ret varchar(1000))
declare @l int
set @l=0
insert @re select fid,@l,right(@id+1000000,4) from tb where id = @id
while @@rowcount>0
begin
set @l=@l+1
insert @re select a.fid,@l,right(b.id+1000000,4)+b.ret from tb a,@re b
where a.id=b.id and b.level=@l-1 and a.id is not null
end
update @re set level=@l-level
select top 1 @ret = ret from @re order by [level]
return @ret
end
go

select *
from tb
order by dbo.get_px(id)

drop function get_px
drop table tb

/****************

id name fid time
----------- ---------- ----------- -----------------------
1 tom NULL 2010-01-01 00:00:00.000
3 frank 1 2010-01-03 00:00:00.000
2 jack NULL 2010-01-02 00:00:00.000
4 frank 2 2010-01-04 00:00:00.000

(4 行受影响)
AcHerat 元老 2011-10-04
  • 打赏
  • 举报
回复
排列是可以的,要用到递归,05以上用CTE可以解决,2000就用函数了。
zhmjppp 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qgqch2008 的回复:]

两张表,一张留言表,一张回复表,很简单的一对多的关系,效率比你这么弄高得多,维护起来也很容易
[/Quote]

好吧。。就两张表把
qgqch2008 2011-10-04
  • 打赏
  • 举报
回复
两张表,一张留言表,一张回复表,很简单的一对多的关系,效率比你这么弄高得多,维护起来也很容易
geniuswjt 2011-10-04
  • 打赏
  • 举报
回复
一定要这样,双层游标可以做到,不过没什么意义
[Quote=引用 5 楼 zhmjppp 的回复:]
引用 4 楼 geniuswjt 的回复:

你把你想要显示的结果造出来看看



SQL code

查询结果
id name contents fid time
1 tom good! null 2010/01/01
3 frank thanks 1 2010/01/03
……
[/Quote]
zhmjppp 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 geniuswjt 的回复:]

你把你想要显示的结果造出来看看
[/Quote]


查询结果
id name contents fid time
1 tom good! null 2010/01/01
3 frank thanks 1 2010/01/03
2 jack very good! null 2010/01/02
4 frank ok! 2 2010/01/04

界面数据绑定
tom发表于2010/01/01:good!
frank回复于2010/01/03:thanks
jack发表于2010/01/02:very good!
frank回复于2010/01/04:ok!

geniuswjt 2011-10-04
  • 打赏
  • 举报
回复
你把你想要显示的结果造出来看看
zhmjppp 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 geniuswjt 的回复:]

没看懂想干嘛,最后排列成1324的顺序有什么用吗?
业务逻辑有问题吧
[/Quote]

3 ,4 分别对应的是 1,2 的回复
显示时,当然要按照顺序来。。
geniuswjt 2011-10-04
  • 打赏
  • 举报
回复
做到肯定是能做到的,不过这么搞不靠谱啊
geniuswjt 2011-10-04
  • 打赏
  • 举报
回复
没看懂想干嘛,最后排列成1324的顺序有什么用吗?
业务逻辑有问题吧

34,590

社区成员

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

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