2

我需要编写每日奖金系统。用户必须能够每天获得一次奖金。我编写了类似的代码:

function checkDailyBonus($user, $type) {
    global $ado;
    $last_day = strtotime(date("Y:m:d 00:00:00"));

    $query = $ado->exec("SELECT * FROM claimed_bonuses WHERE `user` = '$user' and `type` = '$type' ORDER BY `id` DESC");
    $row = mysql_fetch_assoc($query);
    $date = strtotime($row['date']);
    if ($ado->count($query) < 1) {
        return 1;
    } else {
        if ($last_day < $date) {
            return 0;
        } else {
            return 1;
        }
    }
}

但它返回错误的结果:即使今天高于最后一个索赔奖金脚本返回 0,但它应该返回 1。最后索赔日期为 2013-05-19 23:05:41。提前感谢您的帮助。

4

2 回答 2

2

嗯,为什么不呢。

SELECT ..
FROM claimed_bonuses
WHERE DATE(lastbonus) < CURDATE()

当您可以让 MySQL 直接在查询中更简单地执行此操作时,所有这些 strtotime 调用和过滤 PHP 中的整个用户表都毫无意义......

于 2013-05-23T19:54:33.640 回答
0

在不知道您的数据库结构的情况下,我无法为您编写此代码,但我建议您在查询中执行此操作,例如:

对于当天:

SELECT * FROM claimed_bonuses
WHERE `user` = '$user' and `type` = '$type'
AND date_format(`date`, '%Y%b%e') = date_format(now(), '%Y%b%e')

然后检查它是否返回一行。

于 2013-05-23T19:57:59.267 回答