Re: [請益] 請問連續登錄天數要怎麼判斷比較合理
※ 引述《Jerr (身為老爸老媽嚕..)》之銘言:
: ※ 引述《maplecat (楓葉喵)》之銘言:
: : 其實要是我寫我應該會直接在資料庫在撈取時就直接進行判斷
: : 警告"這只是個想法" 我也不確定對不對~
: : 請替換裡面欄位名與變數~~~
: : $SeTime = "SELECT * ";
: : $SeTime .= "FROM `LoginTimeTable` ";
: : $SeTime .= "WHERE `NowLogin` - `LastLoginTime` >= 86400";
: : 這樣子再去加使用者條件 判斷是否有數據
: : 應該就可以判斷了吧?
: 86400會精確到秒
: 如果精確到日就可以的話, MySQL 可用 DATEDIFF
: SELECT DATEDIFF( NOW(), login_time ) FROM `User`;
: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html\
: #function_datediff
: php 5.3 有 date_diff 可以用,事實上他是 DateTime::diff()
: 參數是兩個DateTime object,return 的是 DateInterval object
: http://tw2.php.net/manual/en/datetime.diff.php
用 DATEDIFF 的話,最好用 explain 看一下....
mysql> explain SELECT date FROM xxxx FORCE INDEX (date) WHERE
DATEDIFF(NOW(),date)>=1 LIMIT 10\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: daily
type: index
possible_keys: NULL
key: date
key_len: 12
ref: NULL
rows: 3486117
Extra: Using where; Using index
1 row in set (0.00 sec)
mysql> explain SELECT date FROM xxxx WHERE date<=DATE_SUB(NOW(),INTERVAL 1
DAY) LIMIT 10\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: daily
type: range
possible_keys: date
key: date
key_len: 3
ref: NULL
rows: 1743058
Extra: Using where; Using index
1 row in set (0.08 sec)
mysql>
兩個 SQL 的結果是一樣的,不過一個要掃三百多萬筆,另一個只要掃一百七十萬筆。
實際的狀況還是得在自己的 mysql 跑跑看。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.192.232.77
※ 編輯: KC73 來自: 123.192.232.77 (01/15 09:58)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):