2013-12-11 125 views
-1

我需要只有一个查询帮助的问题,这是例如我的表MySQL的:与选择查询

id time status sid 
1 10:00 0  1 
2 12:00 0  2 
3 11:00 1  1 
4 13:00 1  2 

(状态0 =登录,状态1 =注销) 我想在一个用户知道登录和注销时间。 选择查询的结果应该是这样的:

结果:

id time time2 sid 
1 10:00 11:00 1 
2 12:00 13:00 2 

的结果应该包含相同的SID对一个有状态0和具有状态1,以便为接下来的一行结果我会合并两次首先是用户的登录时间,第二次是注销时间?

+0

如果我们有2个以上记录的SID = 1。或者你可以说,如果用户多次登录会比追踪它多么? (需要更新表结构) –

+0

查询应该为该用户返回一行,因为他可以多次登录,唯一的问题是我需要在同一行中登录和注销时间。我需要为他的每个会话匹配状态0和状态1。 – user20902

+0

看到我的答案它会为你工作。 –

回答

0

我假设每个用户只有一次登录。

SELECT id,time,(select time from table C where M.sid=C.sid and status = 1 LIMIT 1),sid 
FROM table M WHERE status = 0 

如果你在你的表添加一个列到这个样子:

id time status sid loginid 
11 10:00 0  1 0 
12 12:00 0  2 0 
13 11:00 1  1 11 
14 13:00 1  2 12 

比你可以查询像

SELECT id,time,(select time from table C where C.loginid=M.id),sid 
FROM table M WHERE status = 0 
+0

这只适用于每个用户一次登录,但我需要全部登录。 – user20902

+0

你的表结构需要修改才能在登录/注销之间进行链接,而不会遇到困难。 –

+0

甚至你的时间字段不存储完整的时间戳。 .. :( –