You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏排行榜PHP函数改造:实现指定时间范围及未来数据查询

自定义时间范围的排行榜查询函数实现与MySQL未来时间查询说明

一、实现指定时间范围的查询函数

没问题,我来帮你把原函数改成支持自定义时间范围的版本!核心思路是给函数添加日期参数,用参数绑定替换硬编码的当月条件,既灵活又能避免SQL注入风险。

下面是修改后的完整函数:

public function getTopMobileUsersByPointsInRange($startDate, $endDate) {
    try {
        $query = "
            SELECT 
                u.id, u.name, u.email, u.password, u.facebook_id, 
                u.created_date, u.token_uid, SUM(s.total_points) AS earned_points, 
                u.used_points, u.gender, u.birthdate, 0 AS ranking 
            FROM mobile_user u 
            JOIN score s ON s.mobile_user_id = u.id 
            WHERE s.report_date BETWEEN :start_date AND :end_date 
            GROUP BY u.id 
            HAVING SUM(s.total_points) > 0 
            ORDER BY SUM(s.total_points) DESC 
            LIMIT 100 
        ";
        $stmt = $this->db->prepare($query);
        // 绑定日期参数,确保格式为MySQL可识别的YYYY-MM-DD或YYYY-MM-DD HH:MM:SS
        $stmt->bindParam(':start_date', $startDate, PDO::PARAM_STR);
        $stmt->bindParam(':end_date', $endDate, PDO::PARAM_STR);
        $stmt->execute();
        $stmt->setFetchMode(PDO::FETCH_CLASS, 'class\Model\MobileUser');
        return $stmt->fetchAll();
    } catch (PDOException $e) {
        $this->logger->error("PDO: ".$e->getMessage(), ["class"=>get_class($this),"method"=>__METHOD__]);
        return null;
    }
}

调用示例(查询2018年6月至8月的数据):

$topUsers = $yourModelInstance->getTopMobileUsersByPointsInRange('2018-06-01', '2018-08-31');

几个小细节提醒:

  • 如果report_date包含时间,想要覆盖结束日期的全天数据,可以把$endDate设为2018-08-31 23:59:59,或者用<= '2018-09-01'简化判断
  • 保留了原函数中HAVING SUM(s.total_points) > 0的条件,确保只返回有有效积分的用户

二、MySQL能否查询未来时间的记录?

当然可以!MySQL对日期查询没有“只能查过去”的限制,只要你的report_date字段中存在未来日期的记录,就能通过WHERE条件筛选出来。

举个例子,如果你的score表中已经录入了2025年1月的积分记录,想要查询2024年12月到2025年2月的排行榜,直接调用上面的函数传入对应日期即可:

$futureTopUsers = $yourModelInstance->getTopMobileUsersByPointsInRange('2024-12-01', '2025-02-28');

需要注意两点:

  • 只有当业务逻辑中确实会往score表插入未来日期的记录(比如预约类的提前积分录入),查询才会返回结果
  • 要确保服务器和MySQL的时区设置一致,避免因为时区偏差导致未来日期被误判为过去日期

内容的提问来源于stack exchange,提问作者Luis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:11:26