您好,因为3小时后我正在努力完成这项工作,但却没有得到我想要的结果。我想显示具有在线和离线状态的用户列表。
这是表格
在这里,我试图获得状态结果。
$loggedtime = time() - 300; // 5 minutes
$query = 'SELECT userid, handle FROM ^users WHERE loggedin = '.$loggedtime.' ORDER BY userid ASC';
// below are scripts function qa_ pleses refer this http://www.question2answer.org/functions.php
$result = qa_db_query_sub($query);
$users = qa_db_read_all_assoc($result);
$row = mysql_fetch_array($result);
if($row['userid'] > $loggedtime){
echo $row['handle'].' is online';
} else {
echo $row['handle'].' is offline';
}
不是这个
foreach($users as $user){
if($user['userid'] > $loggedtime){
echo $user['handle']. ' is online';
} else {
echo $row['handle'].' is offline';
}
}
以上代码均无效。我是MYSQL的新手,PHP只知道基本的,所以请帮我解决这个问题。
修改 我现在尝试了这个但没有工作
foreach($users as $user){
if($user['loggedin'] > $loggedtime){
echo $user['handle']. ' is online';
} else {
echo $row['handle'].' is offline';
}
}
编辑2
$query = "SELECT
userid, handle,
CASE
WHEN TIMESTAMPDIFF(SECOND, loggedin, NOW()) < 300
THEN 'Online'
ELSE 'Offline'
END AS 'status'
FROM ^users
ORDER BY userid";
$result = qa_db_query_sub($query);
while($user = mysql_fetch_array($result)){
echo $user['handle'] . '<BR/>';
}
新方法
答案 0 :(得分:1)
为什么不检查数据库端?
SELECT
userid, handle,
CASE
WHEN TIMESTAMPDIFF(SECOND, loggedin, NOW()) < 300
THEN 'Online'
ELSE 'Offline'
END AS 'status'
FROM ^users
ORDER BY userid
您可以使用
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
返回datetime_expr2 – datetime_expr1
,其中datetime_expr1
和datetime_expr2
是date
或datetime
表达式。一个表达式可以是date
,另一个是datetime
;date
值被视为datetime
,必要时包含时间部分'00:00:00'
。结果的单位(整数)由单位参数给出。单位的合法值与TIMESTAMPADD()
函数说明中列出的值相同。
查看MySQL Date and Time Functions。
另外,我强烈建议使用reserved words来表名。
答案 1 :(得分:1)
你的结构看起来很有趣,可以回答这个问题。您的登录字段实际上看起来更像是“他们最后一次登录”。仅仅因为你知道他们何时登录并不一定意味着他们“在线”。
您的查询不起作用的原因是您将UNIX时间戳与mysql日期时间进行比较。另外,你使用= so,除非他们在五分钟前完全登录,否则这将不起作用。
至少。
SELECT userid, handle FROM ^users WHERE loggedin > '.date('Y-m-d h:i:s', time()-300).'ORDER BY....
答案 2 :(得分:1)
由于您修复了用户ID比较,让我们解决下一个问题..
您正在尝试比较字符串DATE与unix时间戳。让它们成为相同类型并进行比较:
foreach($users as $user)
{
$user_time = strtotime($user['loggedin']);
if($user_time > $loggedtime)
{
echo $user['handle']. ' is online';
} else {
echo $row['handle'].' is offline';
}
}
总体而言,这不是解决此问题的最佳方法,但它可能会让您正常工作。上面的数据库解决方案可能是最好的。