Php 连接表并在两个日期之间计数
我很难理解如何连接表,所以很抱歉我的问题=D 好的。我有两个表:Php 连接表并在两个日期之间计数,php,mysql,Php,Mysql,我很难理解如何连接表,所以很抱歉我的问题=D 好的。我有两个表:users和user\u-traning 用户培训使用以下列添加用户培训: id、用户id、日期、类型、注释等 users表使用上次登录日期时间更新user\u last\u login行 我的想法是计算用户之间的user\u training中有多少(新)行。user\u last\u login,在user\u traning.date的帮助下 我一直在这样尝试: SELECT COUNT(*) FROM user_tr
users
和user\u-traning
用户培训
使用以下列添加用户培训:
id、用户id、日期、类型、注释等
users
表使用上次登录日期时间更新user\u last\u login
行
我的想法是计算用户之间的user\u training
中有多少(新)行。user\u last\u login
,在user\u traning.date
的帮助下
我一直在这样尝试:
SELECT COUNT(*) FROM user_traning
JOIN users
on users.user_id = user_traning.user_id
WHERE users.user_id = '2' and user_traning.user_id ='2' between
users.user_last_login and now()
因此,我可以在页面上显示一个小徽章,即自上次访问以来添加了多少新会话=)
非常感谢您的帮助 你是最孤独的,但最后你有一个小的语法问题,应该是
SELECT COUNT(*) FROM user_traning ut
JOIN users u
on u.user_id = ut.user_id
WHERE u.user_id = '2'
and ut.user_id ='2'
and ut.date between u.user_last_login and now()
更新:根据评论中提供的解释
考虑以下两个表
mysql> select * from user_training ;
+------+---------+---------------------+
| id | user_id | date |
+------+---------+---------------------+
| 1 | 1 | 2015-04-14 16:35:01 |
| 2 | 1 | 2015-04-14 16:35:10 |
| 3 | 3 | 2015-04-14 16:35:18 |
| 4 | 4 | 2015-04-14 16:35:25 |
| 5 | 2 | 2015-04-13 16:37:16 |
| 6 | 2 | 2015-04-14 15:57:26 |
| 7 | 3 | 2015-04-14 15:27:38 |
+------+---------+---------------------+
7 rows in set (0.00 sec)
mysql> select * from users ;
+---------+------+---------------------+
| user_id | name | user_last_login |
+---------+------+---------------------+
| 1 | AA | 2015-04-14 16:34:10 |
| 2 | BB | 2015-04-14 16:34:10 |
+---------+------+---------------------+
从上述样本数据来看,user\u training
表中有4个条目发生在上次登录user\u id=2
现在我们可以得到这些数据
select * from user_training ut
left join users u on u.user_id = ut.user_id
join (
select user_id,user_last_login from users where user_id = 2
)x on ut.date >= x.user_last_login ;
这会给你
+------+---------+---------------------+---------+------+---------------------+---------+---------------------+
| id | user_id | date | user_id | name | user_last_login | user_id | user_last_login |
+------+---------+---------------------+---------+------+---------------------+---------+---------------------+
| 1 | 1 | 2015-04-14 16:35:01 | 1 | AA | 2015-04-14 16:34:10 | 2 | 2015-04-14 16:34:10 |
| 2 | 1 | 2015-04-14 16:35:10 | 1 | AA | 2015-04-14 16:34:10 | 2 | 2015-04-14 16:34:10 |
| 3 | 3 | 2015-04-14 16:35:18 | NULL | NULL | NULL | 2 | 2015-04-14 16:34:10 |
| 4 | 4 | 2015-04-14 16:35:25 | NULL | NULL | NULL | 2 | 2015-04-14 16:34:10 |
+------+---------+---------------------+---------+------+---------------------+---------+---------------------+
因此,要获得计数,我们可以在查询中使用count
,如下所示:
select count(*) from user_training ut
left join users u on u.user_id = ut.user_id
join (
select user_id,user_last_login from users where user_id = 2
)x on ut.date >= x.user_last_login
users.user\u id='2'和user\u traning.user\u id='2'
您无需对此进行两次检查,因为这两个user\u id
col已经相等,因为[…]上的加入用户部分
谢谢您的回答!但它没有按我希望的方式工作(我认为)。我想计算其他用户的输入,ID为1,3,4,5的用户。。。等,这是在我(用户ID 2)上次登录后进行的。加入是困难的=)请在问题和预期输出中共享一些示例数据。我正在尝试统计自上次从users.user\u last\u登录以来user.user\u id=2
中的新行数。表user\u traning
使用日期列user\u traning.date
保存来自所有用户的数据。我原以为你的答案会奏效,但结果我得到了0
:/提前谢谢,希望有意义=)检查更新的答案,让我知道这是否有效。