創作內容

0 GP

[Postgresql+PHP]比對過期資料

作者:Hiroma│2018-10-26 17:32:01│巴幣:0│人氣:152
今天工作更新了限制權限的部分
使用者報名活動,如果在活動還未開始就取消報名計1點,在活動開始前三天取消則計3點,使用者累計3點則限制報名權限。點數過三個月會重新計算。
而這部分系統是將取消日期寫進DB,另外還有一個"解除限權時間"的欄位,負責記錄解除的時間,如果取消報名日期已經到三個月就會再系統執行時將時間寫入欄位,判斷是否再解除限權時間內有資料,有則不予紀錄此筆計點。

但是問題來了,根本就沒有比對時間資料的程式阿.....導至解除限權時間的欄位一直是NULL值,所以就算在幾百年前的計點都還會有阿...導致一堆人來靠北為甚麼有紀錄= =

所以今天就寫了個簡單的判斷來解決,並使用LINUX指令排程執行
再SQL那吃足了不少苦頭,但是SQL真的很方便,可以少寫很多程式碼

首先以ADODB存取資料庫,所以前面記得要先include元件進來...

//可以自己設定 或者預設就好
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
//宣告一個count變數 等等會用到
$count = 0;
//用個SQL timestamp用系統現在時間(now()函式)減去三個月是否大於計點時間,大於代表超過三個月了要更新,再來判斷是否解除時間的欄位是NULL以避免重複紀錄
$sql = "select *
from 資料表
where timestamp 'now()' - interval '3 month' >= 計點時間 AND 解除時間 is null";
//執行指令並用$res存取結果
$res = $conn-> Execute($sql);
//用$res來當while迴圈的判斷,直到資料結束(EOF)
while(!$res->EOF){
    $sql2 = "update 資料表
             set 解除時間 = 'now()'";
    $conn->Execute(sql2);        
    $count = $count + 1 ; //有更新就+1
}
echo '解除限權筆數: '; //印出筆數
echo $count;

寫完就開LINUX指令讓電腦幫我排程執行啦 輕鬆搞定!

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4174111
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★NcookieCS 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:API應用程式介面...

追蹤私訊切換新版閱覽

作品資料夾

flys8028大家
遊戲介紹的小部落格,有空可以逛逛歐 https://www.rocksugarcat.com/看更多我要大聲說昨天09:03


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】