Php 连接表并在两个日期之间计数

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

我很难理解如何连接表,所以很抱歉我的问题=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_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
:/提前谢谢,希望有意义=)检查更新的答案,让我知道这是否有效。