回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
谢谢分享。这样大家的选择跟宽广一点。问好楼主。呵呵。 永远支持你。回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
虽然不懂,但我还是顶.谢谢你们的无私奉献!回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
Post by Rulzy提供 ado_moveby 只是为了更方便控制记录的移动。你也可以直接用
while(ado_moveby(Result)) {......}
来操作的,因为正常情况下,不带 distance 参数执行 ado_moveby ,其返回值一般都为 1(因为是移动了一个记录),而如果到达了最后一个记录再往后移,它的返回值就为 0 了,因为实际移动了的记录数为 0。
今天试了下,这样会漏掉第一条记录,直接从第二条记录读取.
回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
Post by zwfgdlc今天试了下,这样会漏掉第一条记录,直接从第二条记录读取.
看了斑竹的代码示例,这几天研究了一下,还是不怎么明白。
在插件里面存取玩家的数据是在玩家进服的时候从数据库读取,离线的时候存数据。
但是遇到玩家中途改名字怎么办?是不是要每局开始和完毕就读取和存储排名数据?
CREATE TABLE `shop` (
`article` int(4) unsigned zerofill NOT NULL default '0000',
`dealer` char(20) NOT NULL default '',
`price` double(16,2) NOT NULL default '0.00',
PRIMARY KEY (`article`,`dealer`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `shop` (`article`, `dealer`, `price`) VALUES
(0001, 'A', 3.45),
(0001, 'B', 3.99),
(0002, 'A', 10.99),
(0003, 'B', 1.45),
(0003, 'C', 1.69),
(0003, 'D', 1.25),
(0004, 'D', 19.95);
查询代码
SELECT article, dealer, price, (SELECT count(1) + 1 FROM shop WHERE price > s.price) as level FROM shop s WHERE dealer = 'B' ORDER BY level DESC
仿照上面的怎么写php查询排名代码?不理解count(1) + 1 ,有的写SELECT count(*) as count.不理解这部分基础的sql。
第二个代码实例
SQL Server中,有一个表储存商户交易信息,表结构如下
表名 BM 日期 商户名称 交易金额
现要查1年内交易排名前100名得商户
查询代码
select 编号,数量,(select count(*)+1 as 排名 from 表名 b where b.数量>a.数量) as 排名 from 表名 a order by 数量 desc
CS 排名数据结构
idno CSID杀人数 死亡数 暴头数
idno自动增加。要实现根据csid查询玩家排名怎么查。玩家排名的规则是 (杀人数- 死亡数+2* 暴头数)
回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
表名是stats_db表结构是
idno CSID杀人数 死亡数 暴头数
select CSID,杀人数,死亡数,暴头数,(select count(*)+1 as 排名 from stats_db b where (b.杀人数-b.死亡数+2*b.暴头数)>(a.杀人数-a.死亡数+2*a.暴头数) ) as 排名 from stats_db a order by (杀人数-死亡数+2* 暴头数) desc
是这样的么?
回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
Post by zwfgdlc今天试了下,这样会漏掉第一条记录,直接从第二条记录读取. 呵呵,当时疏忽了这一点,写成do{}while(ado_moveby(Result));就可以了,但要注意记录集为空的处理。比如写成:
if(ado_count(Result)>0)
{
do{
}while(ado_moveby(Result));
}
用while(dbi_nextrow(Result)){}也会存在同样的问题啊。
回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
select idno, CSID, 杀人数,死亡数,暴头数,(杀人数-死亡数+2*暴头数) as 排名 from stats_db order by 排名大概是这样~
回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
或者试一下这样:SELECT idno, CSID, 杀人数, 死亡数, 暴头数 FROM stats_db ORDER BY (杀人数-死亡数+2*暴头数);
回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
Post by Rulzy或者试一下这样:
SELECT idno, CSID, 杀人数, 死亡数, 暴头数 FROM stats_db ORDER BY (杀人数-死亡数+2*暴头数);
好的,多谢,我回去再试试。
估计要按照你前面那个代码。
我最后要返回的是玩家排名。所以玩家排名要作为一个临时字段。
new playername
get_use_name(id,playername,31)
(,,,"slect 排名 From
(select idno, CSID, 杀人数,死亡数,暴头数,(杀人数-死亡数+2*暴头数) as 排名 from stats_db order by 排名) as stats_dbtemp where csid="%s"",playername)
回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库
Post by Rulzy或者试一下这样:
SELECT idno, CSID, 杀人数, 死亡数, 暴头数 FROM stats_db ORDER BY (杀人数-死亡数+2*暴头数);
应该是加个DESC,反序排列吧.