enze 2008-3-5 13:56
排名变化情况处理程序
很久没发过技术贴了,都在灌水。今天发个排名的东东吧。:013:
这个程序主要是处理类似用户排名、博客排名这样的情况的,一般是前100或者1000名吧,表中的数据量不会很大,当然需要根据你的实际情况需要修改某些地方。效果类似附件部分
下面是程序部分
[php]
<?php
/*
* Author: Archon [email=enze@vip.qq.com]enze@vip.qq.com[/email]
*/
/**
* ***************************
* 数据库表order字段
* id、userid 、hits、order、show
* 数据库表order_old字段
* id、userid 、hits、order、show
* 需要用到两个表,这两个表字段一模一样
* 可选表为需要排序的原始表
*/
class LibDataBase
{
function __construct()
{
//********
}
function __destruct()
{
//************
}
function changeDb($db)
{
//************
}
function exec($db)
{
//**************
}
//****************封装了PDO类库,新增了选择不同数据库服务器的数据库及数据表功能
//数据是以散列的库表存放
}
$lib_db=new LibDataBase();
/**
* **************************
* 提取用户数据,并取得排名趋势
* @param int $mode
*/
function setUser($mode=1)
{
global $lib_db;
//转移order数据到order_old中
$lib_db->changeDb('user_total'); //选择目标数据库
$sql="replace into `order_old` select * from `order` ";
$lib_db->exec($sql); //执行SQL
sleep(3); //暂停3秒等待mysql处理
//清空order表
$lib_db->exec("truncate table `order`");
//插入数据 这个函数中会选择源数据库
setTotalUserData('user','user','user','user','userid,hits','`power` = 0','user_total','`order`',$mode,100);
sleep(3);
//计算并比较排名
updateUserOrder();
}
/**
* ********************
* 更新排名
*/
function updateUserOrder()
{
global $lib_db;
//重新选择目标数据库
$lib_db->changeDb('user_total');
//获取order中有多少数据
$num=$lib_db->getRow("select count(*) as num from `order`");
$sql="select `userid` from `order` order by hits desc";
//按点击率递减取得数据,数组,二维
$res=$lib_db->getAll($sql);
$i=1; //初始化排名
foreach ($res as $key=>$val)
{
//取得排名变化情况
$show=comParaUserOrder($val['userid'],$i);
$sql="update `order` set `order` = ".$i.",`show` = ".$show." where `userid` = ".$val['userid'];
$lib_db->exec($sql);
$i++;
}
}
/**
* ******************
* 取得排名变化情况
* @param int $uid
* @param int $order
* @return int
*/
function comParaUserOrder($uid,$order)
{
global $lib_db;
//计算old排名
$sql="select `order` from `order_old` where `userid` = ".$uid." limit 1";
//取得一条记录
$res=$lib_db->getRow($sql);
//比较两个排名 2为下降 1为上升 0为不变
//这里排名的大小和老大、老二、老三这样的比较类似
if($res['order']<$order)
{
$show=2;
}
elseif($res['order']>$order)
{
$show=1;
}
else {
$show=0;
}
return $show;
}
/**
* **************************************************************
* 从分库中提取数据到total库中
* @param string $dbcfg 配置文件中的DB
* @param string $key 配置文件中的数组下表
* @param string $sdb 源数据库
* @param string $stb 源数据表
* @param string $filed 字段
* @param string $where 查询条件
* @param string $tdb 目标数据库
* @param string $ttb 目标数据表
* @param int $mode 调用模式 0为WEB方式,1为SHELL调用
* @param int $limit 记录条数
* @param string $order 排序字段,这里都是倒排
* @param int $join 0为没有联合查询 1有联合查询
* @param string $stb1 join为1的时候传入的数据表
* @return bool 返回true/false
*/
function setTotalUserData($dbcfg,$key,$sdb,$stb,$filed,$where,$tdb,$ttb,$mode=1,$limit=10,$order='hits',$join=0,$stb1='')
{
global $lib_db;
//从分库中提取数据到total库中的一系列操作
}
//调用
setUser();
?>
[/php]
[[i] 本帖最后由 enze 于 2008-3-5 23:29 编辑 [/i]]
qq33119392 2008-5-11 03:54
边锋假银子制作器,边锋麻将看牌器,
[img]http://www.800133.cn/include/eWebEditor/UploadFile/2006113020257.gif[/img]
[url=http://www.800133.cn/]进入公司网站[/url]
博林软件开发有限公司-免费下载QQ、边锋、联众、中游、远航、茶苑、同城游、冠通、上游、金游,凤凰山庄,青鹏,慈溪游戏,宁波游戏,藏金阁,通吃游戏等国内玩家最多的棋牌游戏新游戏币制作器,刷分器,看底牌器,且公司还开发定做软件,目前公司游戏辅助软件有60多款。
网站[url=http://www.800133.cn/]http://www.800133.cn[/url]
客服QQ:33119392
客服电话:0571-81885552
[url=http://www.800133.cn/]QQ超级刷分器
QQ道具超级生成器
QQ四国军旗看牌器
QQ双扣看牌器
QQ锄大地看牌器
QQ升级看牌器
QQ反作弊器
QQ麻将看牌器
QQ斗地主看牌器
QQ假游戏币制作器
边锋港式五张看牌器
边锋超级刷分器
边锋三跟看牌器
边锋四国军旗看牌器
边锋假银子制作器
边锋麻将看牌器
边锋反作弊器
联众超级刷分器
联众港式五张看牌器
联众赢三张看牌器
联众四国军旗看牌器
联众麻将看牌器
联众假财富制作器
联众反作弊器
中游反作弊器
中游麻将看牌器
中游四国军旗看牌器
茶苑港式五张看牌器
茶苑麻将看牌器
茶苑反作弊器
茶苑四国军旗看牌器
茶苑双扣看牌器
茶苑假财富制作器
茶苑超级刷分器
冠通新五张牌看牌器
冠通关牌看牌器
冠通麻将看牌器
冠通超级刷分器
冠通三跟看牌器
冠通反作弊器
同城游五张牌看牌器
同城游超级刷分器
同城游四国军旗看牌器
同城游麻将看牌器
同城游假银子制作器
同城游反作弊器
远航五张牌看牌器
远航飘三叶看牌器
远航超级刷分器
远航反作弊器
远航四国军旗看牌器
远航麻将看牌器
远航假金币制作器[/url]
博林软件开发有限公司-免费下载QQ、边锋、联众、中游、远航、茶苑、同城游、冠通、上游、金游,凤凰山庄,青鹏,慈溪游戏,宁波游戏,藏金阁,通吃游戏等国内玩家最多的棋牌游戏新游戏币制作器,刷分器,看底牌器,且公司还开发定做软件,目前公司游戏辅助软件有60多款。
网站[url=http://www.800133.cn/]http://www.800133.cn[/url]
客服QQ:33119392 (网站访问不了,请咨询QQ网址)
客服邮箱:[email=33119392@qq.com]33119392@qq.com[/email]
客服电话:0571-81885552