设一表,分别记录点击的id,时间,点击的对象ID
排序的话直接查一遍,$arr[对象ID] ++ ;

解决方案 »

  1.   

    我现在用的一个
    给你做参考:
    数据库字段:`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
      

  2.   

    在48小时点击的那个地方
    总感觉有点臃肿……神仙,或者老大、ASH等等的星星麻烦下帮我优化下