我正在撰写一份申请报告,我有一个问题,我不知道如何解决它。我有一个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对。
我被困在这里,欢迎任何帮助,我很感激所有的帮助。
答案 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 ;