如何获取没有对的值(LOGIN根据会话ID没有LOGOUT对)

时间:2015-03-10 07:57:43

标签: php mysql

我正在撰写一份申请报告,我有一个问题,我不知道如何解决它。我有一个Username,Date_time,Event和SessionID数据表。每个LOG_IN和LOG_OUT对都有唯一的sessionID。我想提取那些,其中LOG_IN根据sessionID没有LOG_OUT对。如果没有,我想在MYSQL中完成它,如果没有,那么在PHP中。

有一个代码,它给我所有事件的表(LOG_IN和LOG_OUT):

SELECT username, date_time, event, sessionID FROM userevent
WHERE username like 'User1'
AND date_time BETWEEN (NOW() - INTERVAL 500 DAY) AND (NOW() + INTERVAL 1   DAY)
ORDER BY date_time DESC

表:

Username    Date_time        Event           SessionID
User1   5.3.2015 13:26:50   LOG_IN  a1e02a779d403df0b7ddd099db14
User1   5.3.2015 11:10:48   LOG_OUT 72651b92ffd2cc5890548fdafe91
User1   4.3.2015 23:37:03   LOG_IN  72651b92ffd2cc5890548fdafe91
User1   4.3.2015 23:36:50   LOG_OUT b10a40d99c9b0eae3d5cbc8947a0
User1   27.2.2015 12:44:00  LOG_IN  b10a40d99c9b0eae3d5cbc8947a0
User1   27.2.2015 12:22:14  LOG_OUT ff210bb81e7550d7d5b24df11d55
User1   22.2.2015 6:20:51   LOG_IN  ff210bb81e7550d7d5b24df11d55
User1   22.2.2015 6:20:15   LOG_OUT c9b40e6eec5616a90573979b54fd
User1   18.2.2015 12:13:15  LOG_IN  c9b40e6eec5616a90573979b54fd
User1   18.2.2015 12:08:41  LOG_OUT 83f068cd8c9c04b1f955495d8c59
User1   14.2.2015 13:20:06  LOG_IN  83f068cd8c9c04b1f955495d8c59
User1   14.2.2015 13:07:36  LOG_OUT 7de97a3caf613ac3bb08dc494c6e
User1   14.2.2015 11:34:46  LOG_IN  7de97a3caf613ac3bb08dc494c6e

现在我需要一个查询来提取那些,其中LOG_IN根据sessionID没有LOG_OUT对。结果必须如下:

Username    Date_time        Event           SessionID
User1   5.3.2015 13:26:50   LOG_IN  a1e02a779d403df0b7ddd099db14

根据sessionID,每个其他事件都有LOG_IN和LOG_OUT对。

我被困在这里,欢迎任何帮助,我很感激所有的帮助。

2 个答案:

答案 0 :(得分:1)

SELECT username, date_time, event, sessionID FROM userevent WHERE username like 'User1' AND date_time BETWEEN (NOW() - INTERVAL 500 DAY) AND (NOW() + INTERVAL 1 DAY) AND sessionID NOT IN (SELECT sessionID FROM userevent WHERE event = LOG_OUT) ORDER BY date_time DESC

就像您的代码一样,但添加了WHERE NOT IN语句,以确保查询不会检索已注销的sessionID。

希望有所帮助。

答案 1 :(得分:0)

你可以这样做

select 
username,
Date_time,
Event,SessionID,
sum(Event='LOG_IN') as login_count, 
sum(Event='LOG_OUT') as logout_count 
from userevent 
group by username,SessionID 
having login_count = 1 and logout_count = 0 ;