iT邦幫忙

0

PHP網頁有辦法設定時間到期自動更改資料庫資料嗎?

假設我有一個優惠的資料表如下
(狀態列=1代表可使用 =0代表無法使用)

優惠名稱 狀態 優惠到期日
AAA 1 2019-10-10
BBB 0 2018-11-11
CCC 0 2019-01-01
DDD 1 2020-10-10

有辦法設定時間到期讓資料表的狀態欄位自動更改為0嗎??
麻煩各位大大給小弟提點

寫一個function 如目前伺服器時間大於優惠到期日 , reture為false ,else return true
小魚 iT邦大師 1 級 ‧ 2019-03-05 13:12:17 檢舉
其實你直接判斷是否到期就好, 狀態欄位似乎沒必要, 網頁不像單機程式開機可以自動執行,一定要打開瀏覽器才會有作用, 像這種時間到自動改狀態的功能,做在網頁比較麻煩,變成要每次網頁開啟都去檢查或改狀態.
scjh8214 iT邦新手 5 級 ‧ 2019-03-06 20:39:53 檢舉
後來想想真的直接判斷有沒有過期是比較好的方式
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
海綿寶寶
iT邦大神 1 級 ‧ 2019-03-05 09:35:00
最佳解答

不用搞什麼定時自動改資料庫

Table 改成以下這樣
真心不騙

優惠名稱 優惠開始日 優惠到期日
AAA 2019-10-01 2019-10-10
BBB 2018-11-01 2018-11-11
CCC 2018-12-25 2019-01-01
DDD 2020-10-01 2020-10-10

然後
原本的

SELECT *
FROM coupon
WHERE status = '1';

改成

SELECT *
FROM coupon
WHERE CONVERT(date, GETDATE()) BETWEEN 優惠開始日 AND 優惠到期日;
看更多先前的回應...收起先前的回應...
scjh8214 iT邦新手 5 級 ‧ 2019-03-06 20:39:17 檢舉

我把資料表改成您說的那樣後
執行SQL語法錯誤
我上網查了一下資料改成這樣可以正確執行

SELECT *
FROM SpecialOffersdata 
WHERE CURDATE() BETWEEN 'Startdate' AND 'expirydate';

但查不到日期範圍內的資料
不知道哪出錯了
資料庫的兩個日期都是date型態

試試看移掉單引號

SELECT *
FROM SpecialOffersdata 
WHERE CURDATE() BETWEEN Startdate AND expirydate;
scjh8214 iT邦新手 5 級 ‧ 2019-03-06 21:26:26 檢舉

我後來上網看到另一種查詢方法
成功了!

SELECT * FROM SpecialOffersdata WHERE Startdate < CURDATE() AND expirydate < CURDATE() ORDER BY `OfferID` ASC

不過還是很感謝你給我了大方向

解決就好,恭喜

1
純真的人
iT邦大師 1 級 ‧ 2019-03-04 23:33:00

1.用系統自動排程去呼叫PHP
2.把更新狀態的SQL放在前端網頁,讓他給別人觸發
3.或者是看那個網頁的功能才觸發期間變更

scjh8214 iT邦新手 5 級 ‧ 2019-03-06 20:41:12 檢舉

後來想想決定採取上面有人建議的用判斷的

上面比較好唷~

scjh8214 iT邦新手 5 級 ‧ 2019-03-06 21:24:54 檢舉

謝謝你的回應 ^^

1
clouding
iT邦新手 5 級 ‧ 2019-03-04 23:55:49

依照這種狀況狀態的欄位是不必要的
你只需要判斷當前日期是否超過優惠日期就可以了

如果是真的特殊狀況要這樣做
那就要利用 crontab 之類的排程去處理

jerry00218 iT邦好手 10 級 ‧ 2019-03-05 00:03:53 檢舉

如果狀態的欄位只會有 0 及 1,我也贊成移除狀態欄位直接用日期時間作為存取的條件

0
Neil
iT邦新手 5 級 ‧ 2019-03-04 23:59:11

mysql 好像有event Scheduler,下面連結給你參考看看
https://stackoverflow.com/questions/27018992/how-to-set-a-timer-in-mysql

scjh8214 iT邦新手 5 級 ‧ 2019-03-06 20:41:23 檢舉

好的感謝

0
混水摸魚
iT邦研究生 2 級 ‧ 2019-03-05 08:38:42

https://www.webteach.tw/?p=114
這篇給你參考

scjh8214 iT邦新手 5 級 ‧ 2019-03-06 20:41:31 檢舉

好的感謝

0
火爆浪子
iT邦研究生 1 級 ‧ 2019-03-05 14:54:06

不用狀態
直接在使用的時候檢查日期就可以了

scjh8214 iT邦新手 5 級 ‧ 2019-03-06 20:42:27 檢舉
SELECT *
FROM SpecialOffersdata 
WHERE CURDATE() BETWEEN 'Startdate' AND 'expirydate';

我用這樣查詢查詢不到時間內的資料
不知道是哪裡錯了??

我要發表回答

立即登入回答