我有一个带有DATETIME字段的MYSQL数据库,当用户通过AJAX登录时,该字段每分钟更新一次。这非常有效。但是,我试图计算有多少登录用户并且它无法正常工作
$table = 'mytable';
$query = "SELECT * FROM $table WHERE lidtm > DATE_SUB(DATE(now()), INTERVAL 1 MINUTE)";
$result = mysqli_query($dbc, $query);
$num = mysqli_num_rows($result);
echo $num;
从理论上讲,这应该告诉我有多少用户登录,因为每个用户的“lidtm”字段在登录时每分钟都会更新,因此如果DATE_SUB函数计算了lidtm字段所在的行数>现在() - 1分钟,它应告诉我所有用户在最后一分钟内由我的ajax更新。
但由于某种原因,它总是返回所有行。
我错过了什么。我需要计算'lidtm'字段在最后一分钟内的行数。
答案 0 :(得分:2)
用now()
包裹date()
将其投放到某个日期,即没有时间:
select date(now());
+-------------+
| date(now()) |
+-------------+
| 2017-05-16 |
+-------------
如果你想测量分钟,你需要时间:
select now();
+---------------------+
| now() |
+---------------------+
| 2017-05-16 13:56:00 |
+---------------------+
所以,只需取出date()
的电话,然后使用:
select date_sub(now(), interval 1 minute);
+------------------------------------+
| date_sub(now(), interval 1 minute) |
+------------------------------------+
| 2017-05-16 13:56:17 |
+------------------------------------+