mysql同一个表中如何根据不同的条件将查询到的记录放到一个结果集中

2025-01-04 11:38:15
推荐回答(4个)
回答1:

sql server的做法是:
select * from table where is_login=1
union
select * from table where is_login=0
mysql也有union,应该也可以正常使用。你试试 。

如果是查询最后一次登录时间和登出时间,条件中加上时间条件就OK了。希望能对你有帮助。

回答2:

从你给的数据就看得出你做事很粗心。
------------
id time is_login
3 2012-07-03 11:20:20 1
3 2012-07-03 11:25:20 0
3 2012-07-03 12:30:20 1 登录时间晚于登出时间?
3 2012-07-03 12:20:50 0
-------------
然后你的预期又是
id login_ time logout_time
3 2012-07-03 11:20:20 2012-07-03 11:25:20
3 2012-07-03 12:20:20 2012-07-03 12:30:50
--------------
这种设计的确有问题,最好一个令牌一次登录和登出。这样简便的多。
假设你给的数据是一一对应的,可以没有登出。
那么如下排序比对的方式:

USE TEST;
SELECT
M.ID,M.Time as login_time,N.Time as logout_time
FROM
(
SELECT A.ID,A.Time,@k:=@k+1 AS rank
FROM
(
SELECT ID,Time FROM loginlog where is_login=1 ORDER BY Time ASC
) A ,(SELECT @k:=0) B
) M
LEFT JOIN
(
SELECT A.ID,A.Time,@r:=@r+1 AS rank
FROM
(
SELECT ID,Time FROM loginlog where is_login=0 ORDER BY Time ASC
) A ,(SELECT @r:=0) B
) N on(M.ID=N.ID and M.rank=N.rank)

----------
执行结果:
id login_ time logout_time

'3' '2012-07-03 11:20:20' '2012-07-03 11:25:20'
'3' '2012-07-03 12:20:20' '2012-07-03 12:30:50'

回答3:

回答4:

select * from 表名 where id=3 and (is_login=1 or is_login=0)