1
我有一个包含“用户会话”的表,另一个表包含系统中的违规行为。一种可能的违规行为是让用户直接登录超过12小时。使用另一个表中的数据过滤MySQL表
中的表如下:
notification:
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| host_id | int(11) | NO | MUL | NULL | |
| alert_id | int(11) | NO | MUL | NULL | |
| event_start | datetime | NO | | NULL | |
| time_noticed | datetime | NO | | NULL | |
| info | varchar(45) | YES | | NULL | |
| seen | int(11) | NO | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
login:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(45) | NO | | NULL | |
| host_id | int(11) | NO | MUL | NULL | |
| start | datetime | NO | | NULL | |
| end | datetime | NO | | NULL | |
| last | int(11) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
我想要的结果表中的条件是:
login.last = 1,login.host_id = X,端>启动+12小时
并请确保我之前没有报告过此实例:
login.host_id!= notification.host_id,notification.alert_id!= Y,login.start!= notification.event_start,login.username!= notification.info
(in换句话说,我不想在同一台主机上得到同一用户的另一份报告,从而使得这个报告成为可能它开始在同一时间同一违法行为)
你已经尝试过了什么,没有奏效? – 2012-03-19 15:33:28
SELECT username,start FROM login LEFT OUTER JOIN notification ON(login.host_id!= notification.host_id OR alert_id!= $ alert_id OR start!= event_start or username!= info)WHERE end> DATE_ADD(start,INTERVAL 12 HOUR)AND login.host_id = $ host_id AND last = 1 – hizki 2012-03-19 15:39:15