这是我的数据库布局:
name
colum 例如,我想知道特定玩家在线多少分钟。
以下查询正常。我得到大约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"
我的查询有什么问题?
答案 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 |