PHP自动判断用户会员过期,php,_定时扣除用户过期积分,但平台用户量比较大,有没有好的解决方法?,php - phpStudy...
定時(shí)扣除用戶過(guò)期積分,但平臺(tái)用戶量比較大,有沒(méi)有好的解決方法?
最近網(wǎng)站實(shí)行用戶積分過(guò)期制度,只保留用戶近三月積分,三月前未使用積分進(jìn)行扣除
但平臺(tái)用戶量比較大,感覺(jué)這樣做會(huì)出問(wèn)題,有沒(méi)有好的解決方法?(windows iis服務(wù)器)
代碼如下:
ignore_user_abort();
set_time_limit(0);
do{
$this->del_score();
sleep(24*3600);
}while (true);
private function del_score()
{
$date = to_date(to_timespan(to_date(TIME_UTC)." -3 month"),'Y-m-d');
// 近三月使用積分
$user_scores = $GLOBALS['db']->getAll("SELECT user_id,sum(score) as score FROM ".DB_PREFIX."user_score_log WHERE score<0 AND create_time_ymd > '".$date."' GROUP BY user_id");
// 扣除用戶過(guò)期積分
$update_sql = "UPDATE ".DB_PREFIX."user SET score = score - CASE id ";
// 添加過(guò)期積分扣除日志
$insert_sql = "INSERT INTO ".DB_PREFIX."user (`user_id`, `score`, `account_score`, `mome`, `type`, `create_time`, `create_time_ymd`, `create_time_ym`, `create_time_y`) VALUES ";
foreach ($user_scores as $k => $v) {
// 總過(guò)期積分
$old_account_score = $GLOBALS['db']->getOne("SELECT account_score FROM ".DB_PREFIX."user_score_log WHERE user_id=".$v['user_id']." AND create_time_ymd<=".$date." ORDER BY id DESC LIMIT 1");
if($old_account_score > abs($v['score'])) // 過(guò)期積分未消費(fèi)完
{
$arr[$v['user_id']] = $v['score'];
// 應(yīng)扣除積分
$score = intval($account_score - abs($v['score']));
$update_sql .= sprintf("WHEN %d THEN %d ", $v['user_id'], $score);
// 賬戶現(xiàn)有積分
$account_score = $GLOBALS['db']->getOne("SELECT score - {$score} FROM ".DB_PREFIX."user WHERE id=".$v['user_id']);
$create_time = TIME_UTC;
$create_time_ymd = to_date(TIME_UTC,"Y-m-d");
$create_time_ym = to_date(TIME_UTC,"Ym");
$create_time_y = to_date(TIME_UTC,"Y");
$insert_sql .= "(".$v['user_id'].",-".$score.",".$account_score.",'積分到期未使用部分扣除',26,".$create_time.",'".$create_time_ymd."','".$create_time_ym."','".$create_time_y."'),";
}
continue;
}
$ids = implode(',', array_keys($arr));
$update_sql .= " END WHERE id IN ($ids)";
$insert_sql = substr($insert_sql, 0, -1);
$GLOBALS['db']->query($update_sql);
$GLOBALS['db']->query($insert_sql);
}
相關(guān)閱讀:
php-fpm 加載php.ini失敗,明明有這個(gè)配置文件的啊
rxbus連續(xù)發(fā)送消息報(bào)錯(cuò)
pycharm 自動(dòng)刪除行尾空格
scala的泛型類(lèi)型的下界定該如何理解》》
fs.writeFile 的問(wèn)題 node 并發(fā)問(wèn)題
vue的ui框架除了VUX用的比較多,還有什么UI是比較好的?
spring-data-mongo的mongoTemplate在spring的taskExecutor中異步執(zhí)行異常
apacheds添加攔截器
esxi 6.5 虛擬內(nèi)存如何設(shè)置?
大部分?jǐn)?shù)據(jù)沒(méi)有行溢出的text字段是否需要拆表
前后端是如何進(jìn)行協(xié)作交互的?
python 模擬操作 如何判斷某個(gè)窗口是否隱藏在托盤(pán),如何最大化,最小化?
Django框架下如何實(shí)現(xiàn)非法登錄次數(shù)限制的功能?
transition 設(shè)置動(dòng)畫(huà)是,用calss正常。用id 就沒(méi)有動(dòng)畫(huà),為什么?
請(qǐng)問(wèn)jq有哪些方法檢測(cè)一個(gè)元素里面是否含有指定的元素
vuex組件里打印this.$store.state為undefined,求解?
mysql如何優(yōu)化這條更新語(yǔ)句?
前端模塊化開(kāi)發(fā)遇到的問(wèn)題,zepto引入報(bào)錯(cuò)
整數(shù)0賦值給字符型變量,再以整型輸出的結(jié)果為什么會(huì)出現(xiàn)48?【HDO 1002 A + B Problem II】
connection.ops.date_trunc_sql() 方法詳解
總結(jié)
以上是生活随笔為你收集整理的PHP自动判断用户会员过期,php,_定时扣除用户过期积分,但平台用户量比较大,有没有好的解决方法?,php - phpStudy...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 薪酬管理的基本原则 薪酬管理的基本原则简
- 下一篇: php冒泡程序讲解,PHP冒泡排序程序代