如何做记录的点击排行功能,给个思路! 设一表,分别记录点击的id,时间,点击的对象ID排序的话直接查一遍,$arr[对象ID] ++ ; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我现在用的一个给你做参考:数据库字段:`hits` , `yhits` , `mhits` , `whits` , `ddhits` , `dhits` , `lastHits` 程序代码如下:(由于我使用了自己写的db类,自己修改相应sql就可以了) /** * 点击计数函数,风逍遥添加于2006-3-26 * 每个ELSE后面$db->Execute("UPDATE `$tableName` set `*hits` = '0'");表示清零 * @param string $fieldName 要计数的字段名 * @param string $fieldID 要计数的字段值标签 * @param string $tableName 数据表 */function click($fieldName,$fieldID,$tableName){ global $db,$IN; $sql = "select * from `$tableName` where `$fieldName` = '$IN[$fieldID]'"; $result = $db->Execute($sql); $result = $result->fields; //print_r($result); //从数据库里初始化 $oldTimeStamp = $result['lastHits']; //最后点击时间 $hits = $result['hits']; //总点击 $yhits = $result['yhits']; //年点击 $mhits = $result['mhits']; //月点击 $whits = $result['whits']; //周点击 $dhits = $result['dhits']; //天点击 $ddhits = $result['ddhits']; //48小时点击 $nowDateArray = getdate(); $oldDateArray = getdate($oldTimeStamp); //year process if($nowDateArray["year"] == $oldDateArray["year"]): $yhits ++; else: $sql = "UPDATE `$tableName` set `yhits` = '0'/* where `$fieldName` = '$IN[$fieldID]'*/"; @$db->Execute($sql); $yhits = 1; endif; //month process if($nowDateArray["year"] == $oldDateArray["year"] && $nowDateArray["mon"] == $oldDateArray["mon"]): $mhits ++; else: $sql = "UPDATE `$tableName` set `mhits` = '0'"; @$db->Execute($sql); $mhits = 1; endif; //week process //取得本周的开始结束时间段-[13985019168] //本周开始时间,从今天开始后退n天到星期天的0点,一个周从星期天开始.如果从星期一开始把0,0,0改为23,59,59 $tmpStartDate = mktime(0,0,0,$nowDateArray["mon"],$nowDateArray["mday"],$nowDateArray["year"]) - ($nowDateArray["wday"] * 86400); //本周结束时间,本周六12点59 $tmpEndDate = mktime(23,59,59,$nowDateArray["mon"],$nowDateArray["mday"],$nowDateArray["year"]) + ((6 - $nowDateArray["wday"]) * 86400); //如果上次更新在这个时间段内,为同一周 if($oldTimeStamp >= $tmpStartDate && $oldTimeStamp <= $tmpEndDate): $whits ++; else: $sql = "UPDATE `$tableName` set `whits` = '0'"; @$db->Execute($sql); $whits = 1; endif; //double day process==>48hours //如果相差时间在48小时内,为同一个48小时 && //时间差大于48小时,清零 if( 60*60*24*2 < ($nowDateArray[0] - $oldDateArray[0]) ): $sql = "UPDATE `$tableName` set `ddhits` = '0'"; @$db->Execute($sql); $ddhits = 1; //如果时间相差在24~48小时内,前一天+1 elseif( 60*60*24*2 > ($nowDateArray[0] - $oldDateArray[0]) && ($nowDateArray[0] - $oldDateArray[0]) > 60*60*24 ): $ddhits = $dhits+1; //如果相差在24小时内,直接+1 else: $ddhits = $ddhits+1; endif; //day process if($nowDateArray["year"] == $oldDateArray["year"] && $nowDateArray["mon"] == $oldDateArray["mon"] && $nowDateArray["mday"] == $oldDateArray["mday"]): $dhits ++; else: $sql = "UPDATE `$tableName` set `dhits` = '0', `lastHits` = '$nowDateArray[0]'"; @$db->Execute($sql); $dhits = 1; endif; //接下来更新最后记录时间数据库 $hits ++;//总点击数加1 $sql = "UPDATE `$tableName` set `hits` = '$hits', `lastHits` = '$nowDateArray[0]', `yhits` = '$yhits', `mhits` = '$mhits', `whits` = '$whits', `dhits` = '$dhits', `ddhits` = '$ddhits' where `$fieldName` = '$IN[$fieldID]'"; //print_r($sql); $db->Execute($sql);}//End function 在48小时点击的那个地方总感觉有点臃肿……神仙,或者老大、ASH等等的星星麻烦下帮我优化下 php+mongodb关联查询 问大侠们一个linux下 smarty模板加载fckeditor 的问 在apache的httpd.conf文件制定一个一级站点,和二级域名跳转,为什么所有的域名都指向一级站点去了? 问个关于php显示时间的问题,大家帮忙 php有没有支持scp,sftp的函数? php连接mssql提示对象名无效!真么办啊? 字段空格之後的值怎麼在text框顯示不出來? 求救!vbb的问题 关于多参数的传递问题! 急急 大家能谈谈用PHP做过的项目和做项目的一些体会吗? 请教同时往几台服务器传文件的工具 变量未定义问题
给你做参考:
数据库字段:`hits` , `yhits` , `mhits` , `whits` , `ddhits` , `dhits` , `lastHits`
程序代码如下:(由于我使用了自己写的db类,自己修改相应sql就可以了)
/**
* 点击计数函数,风逍遥添加于2006-3-26
* 每个ELSE后面$db->Execute("UPDATE `$tableName` set `*hits` = '0'");表示清零
* @param string $fieldName 要计数的字段名
* @param string $fieldID 要计数的字段值标签
* @param string $tableName 数据表
*/
function click($fieldName,$fieldID,$tableName){
global $db,$IN; $sql = "select * from `$tableName` where `$fieldName` = '$IN[$fieldID]'";
$result = $db->Execute($sql);
$result = $result->fields;
//print_r($result); //从数据库里初始化
$oldTimeStamp = $result['lastHits']; //最后点击时间
$hits = $result['hits']; //总点击
$yhits = $result['yhits']; //年点击
$mhits = $result['mhits']; //月点击
$whits = $result['whits']; //周点击
$dhits = $result['dhits']; //天点击
$ddhits = $result['ddhits']; //48小时点击 $nowDateArray = getdate();
$oldDateArray = getdate($oldTimeStamp); //year process
if($nowDateArray["year"] == $oldDateArray["year"]):
$yhits ++;
else:
$sql = "UPDATE `$tableName` set `yhits` = '0'/* where `$fieldName` = '$IN[$fieldID]'*/";
@$db->Execute($sql);
$yhits = 1;
endif;
//month process
if($nowDateArray["year"] == $oldDateArray["year"] && $nowDateArray["mon"] == $oldDateArray["mon"]):
$mhits ++;
else:
$sql = "UPDATE `$tableName` set `mhits` = '0'";
@$db->Execute($sql);
$mhits = 1;
endif;
//week process
//取得本周的开始结束时间段-[13985019168] //本周开始时间,从今天开始后退n天到星期天的0点,一个周从星期天开始.如果从星期一开始把0,0,0改为23,59,59
$tmpStartDate = mktime(0,0,0,$nowDateArray["mon"],$nowDateArray["mday"],$nowDateArray["year"]) - ($nowDateArray["wday"] * 86400);
//本周结束时间,本周六12点59
$tmpEndDate = mktime(23,59,59,$nowDateArray["mon"],$nowDateArray["mday"],$nowDateArray["year"]) + ((6 - $nowDateArray["wday"]) * 86400);
//如果上次更新在这个时间段内,为同一周
if($oldTimeStamp >= $tmpStartDate && $oldTimeStamp <= $tmpEndDate):
$whits ++;
else:
$sql = "UPDATE `$tableName` set `whits` = '0'";
@$db->Execute($sql);
$whits = 1;
endif; //double day process==>48hours
//如果相差时间在48小时内,为同一个48小时 &&
//时间差大于48小时,清零
if( 60*60*24*2 < ($nowDateArray[0] - $oldDateArray[0]) ):
$sql = "UPDATE `$tableName` set `ddhits` = '0'";
@$db->Execute($sql);
$ddhits = 1;
//如果时间相差在24~48小时内,前一天+1
elseif( 60*60*24*2 > ($nowDateArray[0] - $oldDateArray[0]) && ($nowDateArray[0] - $oldDateArray[0]) > 60*60*24 ):
$ddhits = $dhits+1;
//如果相差在24小时内,直接+1
else:
$ddhits = $ddhits+1;
endif;
//day process
if($nowDateArray["year"] == $oldDateArray["year"] && $nowDateArray["mon"] == $oldDateArray["mon"] && $nowDateArray["mday"] == $oldDateArray["mday"]):
$dhits ++;
else:
$sql = "UPDATE `$tableName` set `dhits` = '0', `lastHits` = '$nowDateArray[0]'";
@$db->Execute($sql);
$dhits = 1;
endif;
//接下来更新最后记录时间数据库
$hits ++;//总点击数加1
$sql = "UPDATE `$tableName` set `hits` = '$hits', `lastHits` = '$nowDateArray[0]', `yhits` = '$yhits', `mhits` = '$mhits', `whits` = '$whits', `dhits` = '$dhits', `ddhits` = '$ddhits' where `$fieldName` = '$IN[$fieldID]'";
//print_r($sql);
$db->Execute($sql);
}//End function
总感觉有点臃肿……神仙,或者老大、ASH等等的星星麻烦下帮我优化下