作者KC73 (肯先生)
看板PHP
标题Re: [请益] 请问连续登录天数要怎麽判断比较合理
时间Sat Jan 15 09:56:45 2011
※ 引述《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)