在一个查询中获取在线用户和离线用户,而不是两个单独的查询?

时间:2014-09-09 22:21:24

标签: mysql sql

我有一个名为users的表,它有两列,id和last_activity,

目前,我这样做是为了让所有在线用户

SELECT * FROM users WHERE last_activity + 300 > NOW();

这样做是为了让离线用户

SELECT * FROM users WHERE last_activity + 300 < NOW();

然后将结果组合在一起显示在具有特定图标(绿色或红色)的页面上,具体取决于状态。

如何在飞行中添加一个列,例如(is_online),此列应该与每一行相关联,因此我可以得到类似下面的内容。所以我可以在一个查询中结合上述两个查询,并能够在以后区分用户的状态吗?

id    | is_online
1337  | 1
1334  | 1
XXXX  | 0

列is_online实际上并不存在于表中,我想动态创建它并给它值1如果last_activity + 300&gt; NOW()否则给它值0

2 个答案:

答案 0 :(得分:4)

MySQL将布尔表达式视为整数。你可以这样做:

SELECT u.*, (last_activity + 300 > NOW()) as is_online
FROM users u;

答案 1 :(得分:3)

您可以尝试使用单个查询来获取所需的结果以及您想要使用CASE的其他列

SELECT  Id, 
        CASE
          WHEN last_activity + 300 > NOW() THEN 1
          ELSE 0 
        END as Is_Online
FROM Users