Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQl:select查询的问题_Mysql_Select - Fatal编程技术网

MySQl:select查询的问题

MySQl:select查询的问题,mysql,select,Mysql,Select,我只需要一个查询的帮助,例如我的表 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=注销) 我想知道在一行用户登录和注销时间。 select查询的结果应如下所示: id time status sid loginid 11 10:00 0 1 0 12 12:00 0 2

我只需要一个查询的帮助,例如我的表

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=注销) 我想知道在一行用户登录和注销时间。 select查询的结果应如下所示:

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
结果:

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

结果中的一行应该包含相同的sid对—状态为0的一行和状态为1的下一行,因此我会合并两次—第一次是用户的登录时间,第二次是注销时间?

我假设每个用户只进行一次登录

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

如果sid=1的记录超过2条,该怎么办。或者你可以说,如果一个用户多次登录,你会跟踪它吗?(需要更新表结构)查询应该为该用户返回多行,因为他可以多次登录唯一的问题是我需要将他的登录和注销时间放在同一行中。我需要为他的每个会话匹配他的状态0和状态1。请看我的回答。这将对您有效。这将限制用户只能登录一次,但我用户可以有多个登录,因此这对我无效。您的表结构问题:1)时间应为时间戳或日期时间2)登录和注销之间没有关联。这将导致每个用户只能登录一次,但我需要拥有他的所有登录名。您的表结构需要修改,以便在登录/注销之间建立链接,否则将很困难。甚至您的时间字段也不存储完整的时间戳…:(时间戳不是问题,我给出的时间只是一个例子,问题是我必须找出这个表结构的一些东西,它为同一个用户返回多个登录会话。更新了我的答案,以获得更多的列和查询。