时间计算和使用mysql计数

时间:2013-01-25 08:43:25

标签: mysql

这是我的数据库布局:

  • ID(int - 唯一主键
  • user(int) - 我按name colum
  • 搜索的用户的外键
  • starttime(timestamp) - 会话开始时间
  • endtime(timestamp) - 会话结束时间
  • idletime(int) - 以分钟为单位的空闲时间

例如,我想知道特定玩家在线多少分钟。

以下查询正常。我得到大约3443分钟。

SELECT user, 
       SUM(TIMESTAMPDIFF(MINUTE,starttime,endtime)-idletime) 
FROM gc_sessions 
WHERE user = 139

但是如果我想用连接来做这个,我使用以下查询得到8。

 SELECT name, 
        SUM(TIMESTAMPDIFF(MINUTE,starttime,endtime)-idletime) 
 FROM gc_sessions 
 JOIN gc_users ON gc_user.id = gc_sessions.id
WHERE name LIKE "variell"

我的查询有什么问题?

2 个答案:

答案 0 :(得分:2)

请尝试以下查询并告诉我结果

SELECT `name`, SUM(TIMESTAMPDIFF(MINUTE,`starttime`,`endtime`)-`idletime`) 
    FROM `gc_sessions` inner JOIN `gc_users` ON 
    `gc_sessions`.`user` =`gc_users`.`id` WHERE gc_users.`name` LIKE "variell"

答案 1 :(得分:0)

尝试group by

 SELECT name, 
        SUM(TIMESTAMPDIFF(MINUTE,starttime,endtime)-idletime) 
 FROM gc_sessions 
 JOIN gc_users ON gc_user.id = gc_sessions.userid
WHERE name LIKE "variell"
GROUP BY name
;

不确定您的整个表架构,但首先要注意的是您有on gc_users.id = gc_seeions.id。它必须是用户标识。根据以下演示,即使没有group by,您的查询也能正常运行。下一个可能的问题可能是 LIKE 运算符。如果您想要确切的名称Variell,那么它不应该是like而是=。如果你想使用Like,它只是说你可能也试图获得包含这个字符串的任何名称..但是,如果不知道表格模式和样本数据,很难提交确切的原因。

结果:

|    NAME | TOTALTIME |
-----------------------
| variell |       308 |

查询:

SELECT gu.name, 
        SUM(TIMESTAMPDIFF(MINUTE,gs.starttime,
                          gs.endtime)-gs.idletime) AS TotalTime
 FROM gc_sessions gs 
 JOIN gc_users gu ON gs.userid = gu.id
WHERE gu.name LIKE "%variell%"
GROUP BY gu.name
;

|     NAME | TOTALTIME |
------------------------
| dvariell |       286 |
|  variell |       308 |