php - 如何在 SQL 表中显示上次事件的在线/离线状态

标签 php mysql sql

所以,我有这个查询:

$alt_user_result = execute_pdo_query("SELECT U.username, U.user_id, T.last_activity_time
FROM user_skills S, users U
LEFT JOIN user_status T ON U.user_id=T.user_id
WHERE S.user_id=U.user_id and S.task_type_id=? and S.permission='Yes';",
array($tablerow['task_type_id']));

我正在做这样的事情来显示状态:

foreach($alt_user_result as $cur_user) {

 if($cur_user['user_id'] != 1){

   if( (time(date('Y-m-d H:i:s')) - time($cur_user['last_activity_time'])) < 300 ){
    echo "<option value='$cur_user[user_id]'>$cur_user[username] | online</option>";
   }
   else if( (time(date('Y-m-d H:i:s')) - time($cur_user['last_activity_time'])) >300){
    if( (time(date('Y-m-d H:i:s')) - time($cur_user['last_activity_time']))<1800 ) {
     echo "<option value='$cur_user[user_id]'>$cur_user[username] | idle</option>";
    }
   }
   else if( (time(date('Y-m-d H:i:s')) - time($cur_user['last_activity_time']))>1800 ){
     echo "<option value='$cur_user[user_id]'>$cur_user[username] | offline</option>";
   }
  }
  var_dump((time(date('Y-m-d H:i:s')) - time($cur_user['last_activity_time'])));
 }
 echo "<input type='submit' name='reassign' value='Reassign'/></select></form>";
}

我的表格中的last_activity_time是:datetime

表中的var_dump结果只有零并且不正确,如果我删除time()它将显示时间之间的差异,但与time() 它中断了;

如果上次事件 <= 5 分钟 => 状态:在线,我需要做什么

如果时间 > 5 分钟且 <= 30 分钟 => 状态:空闲

如果超过 30 分钟 => 状态:离线。

我做错了什么?有什么想法吗?

最佳答案

可以用MySQL解决 TIMESTAMPDIFF() CASE 功能

SELECT * , TIMESTAMPDIFF( 
MINUTE , last_active, NOW( ) ) AS minuteDiff, 
CASE  
WHEN TIMESTAMPDIFF( MINUTE , last_active, NOW( ) ) >30 THEN  'Offline'
WHEN TIMESTAMPDIFF( MINUTE , last_active, NOW( ) ) > 4 THEN  'Idle'
WHEN TIMESTAMPDIFF( MINUTE , last_active, NOW( ) ) THEN  'Online'    
END AS userStatus
FROM tbl_time

现在检查userStatus列的条件

更新

注意:您可以使用图像或任何您想要的东西,这并不重要。

上面的查询之后,您可以按照下面的方式在 php 中显示它

<select name ="selectName" id ="selectID" > 
foreach($alt_user_result as $cu)
{

    switch($cu['userStatus'])
    {
        case 'Online' :
                        $txt = 'Online';
                        $img = 'images/online.png';
                        break;
        case 'Idle' :
                    $txt = 'Idle';
                    $img = 'images/idle.png';
                    break;
        case 'Offline' :
                    $txt = 'Offline';
                    $img = 'images/offline.png';
                    break;
        default : 
                // here you can set default value
    }

    if($cu['user_id'] != 1) {
      echo "<option value='$cu[user_id]'> $cu['username'] | $txt 
                /*  or you can show respective image */
                | <img src ='$img' alt='$txt' title='$txt'/>
            </option> ";
    } // end of if
} // end of foreach
</select>   

关于php - 如何在 SQL 表中显示上次事件的在线/离线状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883830/

相关文章:

php - SQL:如何使用 SQL 选择查询计算本月至今的 P&L(利润和损失)?

对 2 个表的 mysql 查询与计数

php - 如何只允许登录用户访问linux服务器上文件夹中的文件

php - php中utf-8编码的问题

php - MySql 西类牙语字符数据

python - MySQL从Python插入/更新,来自Excel电子表格的数据

javascript - Php 相当于 Javascript 的 Array.from()

PHP <select> 不填充结果

具有额外优先级列的 Mysql JOIN

sql - 从 PostgreSQL DB 查询时间戳的最大值