我需要编制每日奖金制度。 用户必须能够每天收到一次奖金。 我编写了类似的东西:
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。提前感谢您的帮助。
答案 0 :(得分:2)
SELECT ..
FROM claimed_bonuses
WHERE DATE(lastbonus) < CURDATE()
对于所有这些strtotime调用并且在PHP中过滤整个用户表是没有意义的,因为当MySQL可以直接在查询中更简单地执行它时...
答案 1 :(得分:0)
在不知道您的数据库结构的情况下,我无法为您编写此内容,但我建议您在查询中执行以下操作:
当天:
SELECT * FROM claimed_bonuses
WHERE `user` = '$user' and `type` = '$type'
AND date_format(`date`, '%Y%b%e') = date_format(now(), '%Y%b%e')
然后检查它是否返回了一行。