冰心草 发表于 2008-5-4 20:14:35

回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库

谢谢分享。这样大家的选择跟宽广一点。问好楼主。呵呵。 永远支持你。

wjf365 发表于 2008-6-15 05:52:04

回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库

虽然不懂,但我还是顶.谢谢你们的无私奉献!

zwfgdlc 发表于 2008-7-12 02:06:52

回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库

Post by Rulzy
提供 ado_moveby 只是为了更方便控制记录的移动。你也可以直接用
while(ado_moveby(Result)) {......}
来操作的,因为正常情况下,不带 distance 参数执行 ado_moveby ,其返回值一般都为 1(因为是移动了一个记录),而如果到达了最后一个记录再往后移,它的返回值就为 0 了,因为实际移动了的记录数为 0。
今天试了下,这样会漏掉第一条记录,直接从第二条记录读取.

Cr@zyTreE 发表于 2008-7-12 09:10:39

回复: 使用 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* 暴头数)

Cr@zyTreE 发表于 2008-7-12 11:16:39

回复: 使用 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

是这样的么?

Rulzy 发表于 2008-7-12 11:24:17

回复: 使用 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)){}也会存在同样的问题啊。

Rulzy 发表于 2008-7-12 11:28:12

回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库

select idno, CSID, 杀人数,死亡数,暴头数,(杀人数-死亡数+2*暴头数) as 排名 from stats_db order by 排名

大概是这样~

Rulzy 发表于 2008-7-12 11:34:16

回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库

或者试一下这样:
SELECT idno, CSID, 杀人数, 死亡数, 暴头数 FROM stats_db ORDER BY (杀人数-死亡数+2*暴头数);

Cr@zyTreE 发表于 2008-7-12 11:47:29

回复: 使用 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)

zwfgdlc 发表于 2008-7-12 12:37:54

回复: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库

Post by Rulzy
或者试一下这样:
SELECT idno, CSID, 杀人数, 死亡数, 暴头数 FROM stats_db ORDER BY (杀人数-死亡数+2*暴头数);
应该是加个DESC,反序排列吧.
页: 1 2 3 [4] 5 6 7
查看完整版本: 使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库!!(V1.01