设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 817|回复: 1
打印 上一主题 下一主题

[查询] 很复杂的排名查询,数据库达人进~

[复制链接]
跳转到指定楼层
1#
发表于 2009-6-16 11:41:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mwy5ym 于 2009-6-16 11:43 编辑

最近在设计cstrike的一个数据库,在排名(根据玩家得分)上遇到了瓶颈.望网友们协助.

表的设计如下(带下划线的为主键)
BombStats(Md5,Planting,Planted,Explode,Defusing,Defused)
其中Md5为文本,其余均为数字
Client(NickName,Password,Md5,LastIPAddress,Rank,LastRank,Score,OnlineTime,RegisterDateTime,LastOnlineDateTime)
其中
NickName,Password,Md5,LastIPAddress为文本
Rank,LastRank,Score为数字
RegisterDateTime,LastOnlineDateTime为日期/时间
RoundStats(Md5,T,CT,S,WinT,WinCT,FirstKill,FirstDeath,LastKill,LastDeath)
其中Md5为32位文本,其余均为数字
WeaponStats(Md5,WeaponID,Kill,Death,HeadShot,HeadShoted,TeamKill,Shot,Hit,Damage)
其中Md5为32位文本,其余均为数字

因为是根据得分Score计算排名的,所以要先计算得分
通过这个select查询可以查出得分
  1. SELECT
  2. C.Md5 AS Md5,
  3. (Sum(WS.Kill)*1-Sum(WS.Death)*0.2+Sum(WS.HeadShot)*1+RS.FirstKill*3+BS.Explode*3+BS.Defused*5+C.OnlineTime/1000) AS Score
  4. FROM Client AS C, WeaponStats AS WS, RoundStats AS RS, BombStats AS BS
  5. GROUP BY C.NickName, RS.FirstKill, BS.Explode, BS.Defused, C.OnlineTime, C.Md5, WS.Md5, RS.Md5, BS.Md5
  6. HAVING C.Md5=WS.Md5 AND C.Md5=RS.Md5 AND C.Md5=BS.Md5
  7. ORDER BY (Sum(WS.Kill)*1-Sum(WS.Death)*0.2+Sum(WS.HeadShot)*1+RS.FirstKill*3+BS.Explode*3+BS.Defused*5+C.OnlineTime/1000) DESC;
复制代码
我的需求是
因为数据量很大,所以我希望能有最快的算法可以
1.计算得分并update到Client表里的Score
2.根据得分由高到低进行排名,并update到Client表里的Rank

因为我是通过ADO模块对access文件进行操作的,
所以希望能分别用1句update语句实现(或者告诉我怎么在ADO模块里面实现就可以了)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2009-6-17 19:43:30 | 只看该作者
有没有人啊?帮帮小弟吧~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-17 15:52 , Processed in 0.086013 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表