当前位置:首页 > PHP

php实现日榜周榜月榜

2026-04-03 14:08:43PHP

PHP实现日榜、周榜、月榜的方法

实现日榜、周榜和月榜的核心逻辑是通过时间筛选数据,并按指定规则排序。以下是具体实现方案:

数据库表设计

假设有一个记录用户得分的表scores,结构如下:

CREATE TABLE scores (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    score INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

日榜实现

获取当天得分的排行榜:

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

周榜实现

获取本周得分的排行榜:

$weekStart = date('Y-m-d', strtotime('this week Monday'));
$weekEnd = date('Y-m-d', strtotime('this week Sunday'));
$sql = "SELECT user_id, SUM(score) as total_score 
        FROM scores 
        WHERE DATE(created_at) BETWEEN :weekStart AND :weekEnd 
        GROUP BY user_id 
        ORDER BY total_score DESC 
        LIMIT 10";
$stmt = $pdo->prepare($sql);
$stmt->execute([
    ':weekStart' => $weekStart,
    ':weekEnd' => $weekEnd
]);
$weeklyRanking = $stmt->fetchAll(PDO::FETCH_ASSOC);

月榜实现

获取本月得分的排行榜:

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

性能优化方案

对于大型应用,考虑以下优化措施:

  • created_at字段创建索引
  • 使用缓存(Redis)存储排行榜结果
  • 定时任务预计算排行榜数据

Redis缓存实现示例

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 获取日榜缓存
if (!$dailyRanking = $redis->get('daily_ranking')) {
    // 缓存不存在时从数据库获取
    $dailyRanking = getDailyRankingFromDB();
    $redis->setex('daily_ranking', 3600, json_encode($dailyRanking));
} else {
    $dailyRanking = json_decode($dailyRanking, true);
}

定时任务更新

使用Cron定时更新排行榜:

php实现日榜周榜月榜

0 0 * * * /usr/bin/php /path/to/update_daily_ranking.php
1 0 * * 1 /usr/bin/php /path/to/update_weekly_ranking.php
2 0 1 * * /usr/bin/php /path/to/update_monthly_ranking.php

分享给朋友:

相关文章

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php搜索功能的实现

php搜索功能的实现

实现PHP搜索功能的方法 数据库搜索 使用SQL的LIKE语句进行模糊匹配,适用于简单的搜索需求。 $searchTerm = $_GET['search']; $query = "SELECT *…

php实现进度条

php实现进度条

PHP 实现进度条的方法 使用 HTML 和 CSS 结合 PHP 实现进度条 在 PHP 中,进度条通常通过 HTML 和 CSS 实现,PHP 负责计算进度并更新前端显示。 <div st…

php实现扫码登录

php实现扫码登录

PHP 实现扫码登录的方案 扫码登录通常基于以下流程:用户访问网页生成二维码(含唯一标识),手机扫码后确认登录,服务器验证并完成登录状态同步。以下是具体实现方法: 生成二维码与唯一标识 使用 PHP…

php多态实现

php多态实现

PHP 多态的实现方法 多态是面向对象编程的三大特性之一,允许不同类的对象对同一消息做出响应。PHP 主要通过以下方式实现多态: 通过继承和方法重写 子类继承父类并重写父类方法,实现不同子类对同一方…