当前位置:首页 > PHP

php实现日榜周榜月榜

2026-02-28 05:06:29PHP

实现日榜、周榜、月榜的基本思路

通过时间范围筛选数据并排序是核心逻辑。通常需要结合数据库查询与PHP日期函数处理。

数据库表结构设计

假设有一个记录用户行为的表(如文章点击、积分等):

CREATE TABLE user_actions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    action_type VARCHAR(50) NOT NULL,
    value INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

日榜实现方法

获取当天数据的统计排行:

$today = date('Y-m-d');
$sql = "SELECT user_id, SUM(value) as total 
        FROM user_actions 
        WHERE DATE(created_at) = :today 
        GROUP BY user_id 
        ORDER BY total DESC 
        LIMIT 10";
$stmt = $pdo->prepare($sql);
$stmt->execute([':today' => $today]);
$dailyRanking = $stmt->fetchAll(PDO::FETCH_ASSOC);

周榜实现方法

获取本周数据的统计排行:

$monday = date('Y-m-d', strtotime('monday this week'));
$sunday = date('Y-m-d', strtotime('sunday this week'));
$sql = "SELECT user_id, SUM(value) as total 
        FROM user_actions 
        WHERE DATE(created_at) BETWEEN :monday AND :sunday 
        GROUP BY user_id 
        ORDER BY total DESC 
        LIMIT 10";
$stmt = $pdo->prepare($sql);
$stmt->execute([':monday' => $monday, ':sunday' => $sunday]);
$weeklyRanking = $stmt->fetchAll(PDO::FETCH_ASSOC);

月榜实现方法

获取当月数据的统计排行:

$firstDay = date('Y-m-01');
$lastDay = date('Y-m-t');
$sql = "SELECT user_id, SUM(value) as total 
        FROM user_actions 
        WHERE DATE(created_at) BETWEEN :firstDay AND :lastDay 
        GROUP BY user_id 
        ORDER BY total DESC 
        LIMIT 10";
$stmt = $pdo->prepare($sql);
$stmt->execute([':firstDay' => $firstDay, ':lastDay' => $lastDay]);
$monthlyRanking = $stmt->fetchAll(PDO::FETCH_ASSOC);

性能优化建议

对高频查询场景应建立缓存机制:

$cacheKey = 'daily_rank_' . date('Ymd');
if (!$ranking = $cache->get($cacheKey)) {
    // 执行数据库查询
    $cache->set($cacheKey, $ranking, 3600); // 缓存1小时
}

为提升查询效率,建议在数据库添加复合索引:

ALTER TABLE user_actions ADD INDEX idx_created_at_user_id (created_at, user_id);

时区处理方案

确保时区一致性,在PHP脚本开头设置:

date_default_timezone_set('Asia/Shanghai');

对于跨时区应用,可在查询时转换时区:

SELECT user_id, SUM(value) as total 
FROM user_actions 
WHERE DATE(CONVERT_TZ(created_at, '+00:00', '+08:00')) = :date
GROUP BY user_id

php实现日榜周榜月榜

分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="uploa…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Sessi…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…