PHP告诉有多少用户登录

PHP告诉有多少用户登录,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个MYSQL数据库,其中有一个DATETIME字段,当用户通过AJAX登录时,它每分钟都会自我更新。这很好用。然而,我试图得到有多少登录用户计数,它是不工作的 $table = 'mytable'; $query = "SELECT * FROM $table WHERE lidtm > DATE_SUB(DATE(now()), INTERVAL 1 MINUTE)"; $result = mysqli_query($dbc, $query); $num = mysqli_num_

我有一个MYSQL数据库,其中有一个DATETIME字段,当用户通过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_子函数计算lidtm字段>that now()-1分钟的行数,它应该告诉我在最后一分钟内由我的ajax更新的所有用户

但出于某种原因,它总是返回所有行

我错过了什么。我需要计算“lidtm”字段在最后一分钟内的行数。

使用
date()包装
now()
,将其强制转换为日期,即没有时间:

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                |
+------------------------------------+

调用
DATE(now())
将其强制转换为一个日期,因此是最接近的24小时。只需删除
DATE()
位,并自行传递
now()
。@AlexHowansky您应该将其作为答案发布。从我的表格中选择COUNT(*),其中lidtm>DATE\u SUB(now(),间隔1分钟)只是好奇:为什么不保留布尔登录标志?@ShaurabhBharti,因为HTTP是无状态的,你永远不知道何时将其设置为false。目前有一个用户登录,时间戳是2017-05-16 19:59:36,当前时间是2017-05-16 20:01:44,很明显,自从我有用户日志以来,已经超过了1分钟的时间范围out@user3005775Alex发布的内容应该有用,因为它对我有用。也许在你的ajax中有一些你没有发布的东西导致了这一点。运行
选择日期(现在(),间隔1分钟)从phpmyadmin中查看返回的内容。如果失败,那么您的列可能不是正确的类型,和/或其他内容使您失败。phpmyadmin中的did,它仍然返回1行,即使时间戳现在已经30分钟了。该字段是DATETIME类型,因此不确定这是否重要