0

这是我的数据库布局:

  • ID (int - 唯一主键
  • user (int) - 我按列搜索的用户的外name
  • 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"

我的查询有什么问题?

4

2 回答 2

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"
于 2013-01-25T08:49:52.800 回答
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,那么它不应该是likebut =。如果您想使用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 |
于 2013-01-25T09:28:15.037 回答