PHP:显示每个用户是否在线或不在线

问题描述:

如果我有一个具有unix time()标记的列“lastaccess”,如何过滤在线用户?然后我通常有这个功能:PHP:显示每个用户是否在线或不在线

function showStatus($userid) { 
    $timeoutIdle = 80; 
    $timeoutOffline = 150; 
    $row = mysql_query("select last_access from users where id='$userid'"); 
    $read = mysql_fetch_array($row); 
    $last_access = $read["last_access"]; 
    $thetime = time(); 
    if ($thetime - $last_access > $timeoutOffline) { 
     echo ""; 
    } 
    else if ($thetime - $last_access > $timeoutIdle) { 
     echo "<span class='statusIdle'>Idle</span>"; 
    } else { 
     echo "<span class='statusOnline'>Online</span>"; 
    } 
} 

如何查询,它显示如果你在线?

+0

你是什么意思?您已经可以看到用户是否在线。或者您想更改查询,以便结果中包含用户是否在线的信息? – 2010-10-02 18:38:27

$sql = "SELECT 
      CASE 
      WHEN last_access < UNIX_TIMESTAMP()-150 THEN 'offline' 
      WHEN last_access < UNIX_TIMESTAMP()-80 THEN 'idle' 
      ELSE 'online' 
      END AS online_status 
     FROM users 
     WHERE id = $userid";
+0

不错的一个!..... + 1 – Johnson 2010-10-02 19:21:33

+0

不知道我是否可以都喜欢这个,然后做的情况下︰SELECT *,CASE ....? – Johnson 2010-10-02 19:55:40

+0

是的,那是有效的。这将为您提供用户表中的所有字段,然后是“online_status”字段。 – Alec 2010-10-02 19:58:17

MySQL有一些与Date/Times相关的功能。检查出NOW()UNIX_TIMESTAMP()。您可以将此添加到您的查询where子句仅限SELECT在线用户。

SELECT * FROM users WHERE NOW() - last_access < 80; 

或者使用CASE语句来确定给定用户的状态字符串

SELECT CASE 
WHEN (NOW() - last_access > 150) THEN 'offline' 
WHEN (NOW() - last_access > 80) THEN 'idle' 
ELSE 'online' END AS status 
FROM users WHERE id = $user_id; 
+0

不错的编辑..'END CASE AS'虽然不起作用;使用'END AS'。 – Alec 2010-10-02 18:51:39

+0

@Alec根据您的评论编辑了END CASE。谢谢。 – 2010-10-02 19:19:05

+0

哦,这就是为什么它没有工作.. – Johnson 2010-10-02 19:36:08

我想说一个简单的方法来做到这一点是, 当用户登录时更新该用户的状态字段:

$update = mysql_query("UPDATE table SET status='online' WHERE id='$userid'") 
or die(mysql_error()); 

然后在您想要的页面上ee值,如果他们是在网上补充一点:

$status = mysql_query("SELECT online FROM table 
WHERE id='$searched_user'") or die(mysql_error()); 
$row = mysql_fetch_array($status); 

if($row['status'] == "online"){ 
echo "Online"; 
} 
else{ 
echo "Offline"; 
} 

然后,当他们点击注销或当该Cookie /会话已过期:

$update = mysql_query("UPDATE table SET status='offline' WHERE id='$userid'") 
or die(mysql_error());