2013-01-25 96 views
0

這是我的數據庫佈局:時間計算和計數與MySQL

  • ID(INT - 唯一的主鍵
  • 用戶(INT) - 因爲我通過他們的name科拉姆
  • 開始時間進行搜索的用戶外鍵(時間戳) - 會話開始時間
  • 結束時間(時間戳) - 會話結束時間
  • 空閒時間(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" 

我的查詢出了什麼問題?

+0

'gc_users'.'id' [確定](http://en.wikipedia.org/wiki/Functional_dependency)'gc_users'.'user'? – danihp

+0

@Karsten Detmold - 我修改了我的答案。請嘗試新的查詢 –

回答

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" 
+0

謝謝,但它的8太 –

+0

@KarstenDetmold - 你可以請提供兩個表的表創建查詢? –

+0

@KarstenDetmold - 我修改了我的上面的查詢。請運行那 –

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 。它必須是兩個用戶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 | 
+0

@KarstenDetmold請給這個人一個嘗試和評論。 – bonCodigo