搜索
楼主: Rulzy

使用 ADO 模块连接 Access、SQL Server、dBase、FoxPro、Oracle 等多种数据库!!(V1.01

[复制链接]
发表于 2008-5-4 20:14:35 | 显示全部楼层 来自 中国–浙江–杭州

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

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

使用道具 举报

发表于 2008-6-15 05:52:04 | 显示全部楼层 来自 中国–江苏–南京

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

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

使用道具 举报

发表于 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。
今天试了下,这样会漏掉第一条记录,直接从第二条记录读取.
回复

使用道具 举报

发表于 2008-7-12 09:10:39 | 显示全部楼层 来自 中国–广东–深圳–罗湖区

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

Post by zwfgdlc
今天试了下,这样会漏掉第一条记录,直接从第二条记录读取.

看了斑竹的代码示例,这几天研究了一下,还是不怎么明白。
在插件里面存取玩家的数据是在玩家进服的时候从数据库读取,离线的时候存数据。
但是遇到玩家中途改名字怎么办?是不是要每局开始和完毕就读取和存储排名数据?

[php]
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);
[/php]


查询代码
[php]
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]

仿照上面的怎么写php查询排名代码?不理解count(1) + 1 ,有的写SELECT count(*) as count.不理解这部分基础的sql。

第二个代码实例
[php]
SQL Server中,有一个表储存商户交易信息,表结构如下
表名 BM 日期 商户名称 交易金额

现要查1年内交易排名前100名得商户

[/php]
查询代码
[php]
select 编号,数量,(select count(*)+1 as 排名 from 表名 b where b.数量>a.数量) as 排名 from 表名 a order by 数量 desc
[/php]

CS 排名数据结构
[php]
idno CSID  杀人数 死亡数 暴头数
[/php]
idno自动增加。要实现根据csid查询玩家排名怎么查。玩家排名的规则是 (杀人数- 死亡数+2* 暴头数)
回复

使用道具 举报

发表于 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

是这样的么?
回复

使用道具 举报

 楼主| 发表于 2008-7-12 11:24:17 | 显示全部楼层 来自 中国–福建–漳州

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

Post by zwfgdlc
今天试了下,这样会漏掉第一条记录,直接从第二条记录读取.
呵呵,当时疏忽了这一点,写成do{}while(ado_moveby(Result));就可以了,但要注意记录集为空的处理。比如写成:
  1. if(ado_count(Result)>0)
  2. {
  3.     do{
  4.     }while(ado_moveby(Result));
  5. }
复制代码

用while(dbi_nextrow(Result)){}也会存在同样的问题啊。
回复

使用道具 举报

 楼主| 发表于 2008-7-12 11:28:12 | 显示全部楼层 来自 中国–福建–漳州

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

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

大概是这样~
回复

使用道具 举报

 楼主| 发表于 2008-7-12 11:34:16 | 显示全部楼层 来自 中国–福建–漳州

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

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

使用道具 举报

发表于 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[32]
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)
回复

使用道具 举报

发表于 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,反序排列吧.
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

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