如何根据另外一张表的时间范围设置判断该表的状态

收数佬 2018-10-08 10:49:36
需求问题:
1. 用户操作信息表 每十秒一个点记录用户的操作与操作时间.
2. 用户身份表,记录用户当前是属于什么身份信息.只有再发生身份转换的时候才会记录.


用户操作信息表

CREATE TABLE `t_user_flow` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`logTime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`userid` int(11) DEFAULT NULL,
`onlineTime` int(11) DEFAULT NULL,
`network` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8;



用户身份转换表
CREATE TABLE `t_user_typechange` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`logTime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`userid` int(11) DEFAULT NULL,
`userType` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;





INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('103', '2018-09-21 00:00:10', '1', '10', '20');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('104', '2018-09-21 00:00:20', '1', '10', '35');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('105', '2018-09-21 00:00:30', '1', '10', '50');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('106', '2018-09-21 00:00:40', '1', '10', '25');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('107', '2018-09-21 00:00:50', '1', '10', '54');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('108', '2018-09-21 00:01:00', '1', '10', '56');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('109', '2018-09-21 00:01:10', '1', '10', '55');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('110', '2018-09-21 00:01:20', '1', '10', '2');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('111', '2018-09-21 00:01:30', '1', '10', '54');
INSERT INTO `test`.`t_user_flow` (`id`, `logTime`, `userid`, `onlineTime`, `network`) VALUES ('112', '2018-09-21 00:01:40', '1', '10', '56');

INSERT INTO `test`.`t_user_typechange` (`id`, `logTime`, `userid`, `userType`) VALUES ('1', '2018-09-20 23:00:00', '1', '0');
INSERT INTO `test`.`t_user_typechange` (`id`, `logTime`, `userid`, `userType`) VALUES ('2', '2018-09-21 00:00:30', '1', '1');


需求是根据 `t_user_typechange`表中的时间与`userid`字段..把`userType`字段写入到 t_user_flow表中. t_user_flow表中的logTime时间在t_user_typecharge范围在中.
...全文
188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
收数佬 2018-10-09
  • 打赏
  • 举报
回复
引用 4 楼 ACMAIN_CHM 的回复:
mysql> select * from t_user_flow;
+-----+---------------------+--------+------------+---------+
| id  | logTime             | userid | onlineTime | network |
+-----+---------------------+--------+------------+---------+
| 103 | 2018-09-21 00:00:10 |      1 |         10 |      20 |
| 104 | 2018-09-21 00:00:20 |      1 |         10 |      35 |
| 105 | 2018-09-21 00:00:30 |      1 |         10 |      50 |
| 106 | 2018-09-21 00:00:40 |      1 |         10 |      25 |
| 107 | 2018-09-21 00:00:50 |      1 |         10 |      54 |
| 108 | 2018-09-21 00:01:00 |      1 |         10 |      56 |
| 109 | 2018-09-21 00:01:10 |      1 |         10 |      55 |
| 110 | 2018-09-21 00:01:20 |      1 |         10 |       2 |
| 111 | 2018-09-21 00:01:30 |      1 |         10 |      54 |
| 112 | 2018-09-21 00:01:40 |      1 |         10 |      56 |
+-----+---------------------+--------+------------+---------+
10 rows in set (0.01 sec)

mysql> select * from t_user_typechange;
+----+---------------------+--------+----------+
| id | logTime             | userid | userType |
+----+---------------------+--------+----------+
|  1 | 2018-09-20 23:00:00 |      1 |        0 |
|  2 | 2018-09-21 00:00:30 |      1 |        1 |
+----+---------------------+--------+----------+
2 rows in set (0.00 sec)

mysql> select *,(select userType from t_user_typechange where userid=f.userid and logTime<=f.logTime order by logTime desc limit 1) as userType
    -> from t_user_flow f;
+-----+---------------------+--------+------------+---------+----------+
| id  | logTime             | userid | onlineTime | network | userType |
+-----+---------------------+--------+------------+---------+----------+
| 103 | 2018-09-21 00:00:10 |      1 |         10 |      20 |        0 |
| 104 | 2018-09-21 00:00:20 |      1 |         10 |      35 |        0 |
| 105 | 2018-09-21 00:00:30 |      1 |         10 |      50 |        1 |
| 106 | 2018-09-21 00:00:40 |      1 |         10 |      25 |        1 |
| 107 | 2018-09-21 00:00:50 |      1 |         10 |      54 |        1 |
| 108 | 2018-09-21 00:01:00 |      1 |         10 |      56 |        1 |
| 109 | 2018-09-21 00:01:10 |      1 |         10 |      55 |        1 |
| 110 | 2018-09-21 00:01:20 |      1 |         10 |       2 |        1 |
| 111 | 2018-09-21 00:01:30 |      1 |         10 |      54 |        1 |
| 112 | 2018-09-21 00:01:40 |      1 |         10 |      56 |        1 |
+-----+---------------------+--------+------------+---------+----------+
10 rows in set (0.00 sec)

mysql>
您好, 这个可以实现..请问是否还有其他的写法? 谢谢.!
grace8 2018-10-08
  • 打赏
  • 举报
回复
可以把需求转换成业务逻辑,在代码逻辑层处理操作表,
另推荐参考资料深入理解MySQL
ACMAIN_CHM 2018-10-08
  • 打赏
  • 举报
回复
mysql> select * from t_user_flow;
+-----+---------------------+--------+------------+---------+
| id  | logTime             | userid | onlineTime | network |
+-----+---------------------+--------+------------+---------+
| 103 | 2018-09-21 00:00:10 |      1 |         10 |      20 |
| 104 | 2018-09-21 00:00:20 |      1 |         10 |      35 |
| 105 | 2018-09-21 00:00:30 |      1 |         10 |      50 |
| 106 | 2018-09-21 00:00:40 |      1 |         10 |      25 |
| 107 | 2018-09-21 00:00:50 |      1 |         10 |      54 |
| 108 | 2018-09-21 00:01:00 |      1 |         10 |      56 |
| 109 | 2018-09-21 00:01:10 |      1 |         10 |      55 |
| 110 | 2018-09-21 00:01:20 |      1 |         10 |       2 |
| 111 | 2018-09-21 00:01:30 |      1 |         10 |      54 |
| 112 | 2018-09-21 00:01:40 |      1 |         10 |      56 |
+-----+---------------------+--------+------------+---------+
10 rows in set (0.01 sec)

mysql> select * from t_user_typechange;
+----+---------------------+--------+----------+
| id | logTime             | userid | userType |
+----+---------------------+--------+----------+
|  1 | 2018-09-20 23:00:00 |      1 |        0 |
|  2 | 2018-09-21 00:00:30 |      1 |        1 |
+----+---------------------+--------+----------+
2 rows in set (0.00 sec)

mysql> select *,(select userType from t_user_typechange where userid=f.userid and logTime<=f.logTime order by logTime desc limit 1) as userType
    -> from t_user_flow f;
+-----+---------------------+--------+------------+---------+----------+
| id  | logTime             | userid | onlineTime | network | userType |
+-----+---------------------+--------+------------+---------+----------+
| 103 | 2018-09-21 00:00:10 |      1 |         10 |      20 |        0 |
| 104 | 2018-09-21 00:00:20 |      1 |         10 |      35 |        0 |
| 105 | 2018-09-21 00:00:30 |      1 |         10 |      50 |        1 |
| 106 | 2018-09-21 00:00:40 |      1 |         10 |      25 |        1 |
| 107 | 2018-09-21 00:00:50 |      1 |         10 |      54 |        1 |
| 108 | 2018-09-21 00:01:00 |      1 |         10 |      56 |        1 |
| 109 | 2018-09-21 00:01:10 |      1 |         10 |      55 |        1 |
| 110 | 2018-09-21 00:01:20 |      1 |         10 |       2 |        1 |
| 111 | 2018-09-21 00:01:30 |      1 |         10 |      54 |        1 |
| 112 | 2018-09-21 00:01:40 |      1 |         10 |      56 |        1 |
+-----+---------------------+--------+------------+---------+----------+
10 rows in set (0.00 sec)

mysql>
收数佬 2018-10-08
  • 打赏
  • 举报
回复
引用 2 楼 chaigang 的回复:
我有一个思路,你的t_user_flow表没有userType字段啊
对的. 我就是想要把 t_user_typecharge表中的userType字段插入到t_user_flow表中. 按照userid 与 t_user_type_charge的 logTime 字段
  • 打赏
  • 举报
回复
我有一个思路,你的t_user_flow表没有userType字段啊

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧