当前位置:首页 > 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);

周榜实现方法

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

php实现日榜周榜月榜

$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);

性能优化建议

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

php实现日榜周榜月榜

$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 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…

php实现域名

php实现域名

PHP实现域名操作的方法 获取当前域名 使用$_SERVER['HTTP_HOST']可以获取当前访问的域名: $currentDomain = $_SERVER['HTTP_HOST']; ech…