加入表格并在两个日期之间计算

时间:2015-04-14 09:15:00

标签: php mysql

我很难理解如何加入表格,对不起我的问题= D

好的。我有两个表:usersuser_traning

user_traning使用以下列添加用户培训:

id, user_id, date, type, notes

users表使用上次登录日期时间更新user_last_login行。

我的想法是在user_training的帮助下users.user_last_login计算user_traning.date中有多少(新)行。{/ 1>

我一直在尝试这样:

    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()

所以我可以在页面上显示一个小徽章,自上次访问以来已添加了多少个新会话=)

非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

你在那里是alomost但最后你有一个小的语法问题,它应该是

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()

更新:根据评论中提供的解释。

考虑以下2个表

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_training表中有4个条目,该条目在上次登录user_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