免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tigerfish
打印 上一主题 下一主题

求数据库重新排序的语句,谢谢~ [复制链接]

论坛徽章:
0
31 [报告]
发表于 2004-09-21 15:46 |只看该作者
你告诉我你bbs表里announceid,rootid,dateandtime 跟你举例的表ID, A, B怎么对应的,我给你写。

论坛徽章:
0
32 [报告]
发表于 2004-09-21 15:53 |只看该作者
最初由 magicangel 发布
[B]你告诉我你bbs表里announceid,rootid,dateandtime 跟你举例的表ID, A, B怎么对应的,我给你写。 [/B]


announceid=ID
rootid=A
dateandtime=B

论坛徽章:
0
33 [报告]
发表于 2004-09-21 16:23 |只看该作者
假如你的announceid→id,rootid→a,dateandtime→b
那么应该这样写,将结果存放在#bbs这张临时表里:

select b.announceid,a.rootid,a.dateandtime into #bbs
from (select top 100000000 a.rootid,a.dateandtime,count(1) seq from bbs a,bbs b where a.rootid=b.rootid and a.dateandtime>=b.dateandtime group by a.rootid,a.dateandtime order by a.rootid,a.dateandtime desc) a,
(select top 100000000 a.announceid,a.rootid,count(1) seq from bbs a,bbs b where a.rootid=b.rootid and a.announceid>=b.announceid group by a.rootid,a.announceid order by a.rootid,a.announceid desc) b
where a.rootid=b.rootid and a.seq=b.seq

论坛徽章:
0
34 [报告]
发表于 2004-09-21 16:32 |只看该作者
你的记录有几百万条,执行上面的语句之前,先建个索引:
create clustered index ix_bbs on bbs(rootid)

这样可以优化执行效率

论坛徽章:
0
35 [报告]
发表于 2004-09-21 16:33 |只看该作者
然后你
select * from #bbs
可以看看结果对不对。

我现在等你告诉我。刚好空下来了一会。

论坛徽章:
0
36 [报告]
发表于 2004-09-21 19:10 |只看该作者
不好意思,刚下班回来.

你的语句测试通过,结果我也看了完全符合我的要求

现在怎么把这个结果写回bbs表?

论坛徽章:
0
37 [报告]
发表于 2004-09-21 19:35 |只看该作者
备份数据库。

alter table bbs nocheck constraint all --取消bbs所有的关联

delete bbs --清空bbs里的记录

insert bbs(announceid,rootid,dateandtime)
select announceid,rootid,dateandtime from #bbs --将临时表里的数据放回bbs表

alter table bbs check constraint all  --恢复关联

最后前台测试效果

论坛徽章:
0
38 [报告]
发表于 2004-09-21 21:07 |只看该作者
最初由 magicangel 发布
[B]备份数据库。

alter table bbs nocheck constraint all --取消bbs所有的关联

delete bbs --清空bbs里的记录

insert bbs(announceid,rootid,dateandtime)
select announceid,rootid,dateandtime from #bbs --将临时表里的数据放回bbs表

alter table bbs check constraint all  --恢复关联

最后前台测试效果 [/B]


你的命令不适合耶,我的表还有其他列,要怎么用临时表的对应记录替换bbs表的相应记录?

嘿嘿,作为数据库菜鸟第一次来这里就受到两大版主的鼎立相助.感动ing...:right:

论坛徽章:
0
39 [报告]
发表于 2004-09-21 21:19 |只看该作者
最初由 军长 发布
[B]

你的命令不适合耶,我的表还有其他列,要怎么用临时表的对应记录替换bbs表的相应记录?

嘿嘿,作为数据库菜鸟第一次来这里就受到两大版主的鼎立相助.感动ing...:right: [/B]


不客气。

lodge兄可是博士。

或者简单点的更改bbs表可以这么写,不作insert而是update:

update bbs set announceid=b.announceid
from bbs a,#bbs b
where a.rootid=b.rootid and a.dateandtime=b.dateandtime

论坛徽章:
0
40 [报告]
发表于 2004-09-21 21:21 |只看该作者
嗯,有其他列,就用update吧。

回到家,路上才想起来,不用那么复杂用insert。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP