【问题标题】:Time calculations and counts with mysql使用mysql的时间计算和计数
【发布时间】:2013-01-25 08:43:25
【问题描述】:

这是我的数据库布局:

  • ID(int - 唯一主键
  • user (int) - 我通过 name 列搜索的用户的外键
  • 开始时间(时间戳) - 会话开始时间
  • endtime(时间戳)- 会话结束时间
  • 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"

我的查询有什么问题?

【问题讨论】:

  • gc_users.id determine gc_users.user ?
  • @Karsten Detmold - 我修改了我的答案。请尝试新查询

标签: mysql


【解决方案1】:

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

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"

【讨论】:

  • @KarstenDetmold - 你能提供两个表的建表查询吗?
  • @KarstenDetmold - 我修改了上面的查询。请也运行它
【解决方案2】:

试试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 |

【讨论】:

  • @KarstenDetmold 试一试并发表评论。
猜你喜欢
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2011-09-24
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多