2017-06-20 83 views
1

我已保存的日期時間表...我需要用mysql來計算0D 0H0米0格式的持續時間來顯示它在數據表:MySQL的計算僅第一行

+----+---------------------+ 
| id | playtime   | 
+----+---------------------+ 
| 2 | 08:58:24 20/06/2017 | 
| 1 | 08:57:33 20/06/2017 | 
+----+---------------------+ 

這是我的查詢:

SELECT (SELECT GROUP_CONCAT(       
    TIMESTAMPDIFF(day, live.playtime, NOW()) , 'd ',         

    MOD(TIMESTAMPDIFF(hour, live.playtime, NOW()), 24), 'h ',       

    MOD(TIMESTAMPDIFF(minute, live.playtime, NOW()), 60), 'm ',       

    MOD(TIMESTAMPDIFF(second, live.playtime, NOW()), 60), 's'      
) FROM live) AS duration; 

的問題是,只有第一個ID計算和其他IDS被忽略....我怎麼能返回多個結果每個ID計算方法爲時間?

我需要回到這樣的:

+-----------------------------+ 
| duration     | 
+-----------------------------+ 
| 0d 0h 13m 50s,0d 0h 12m 59s | 
+-----------------------------+ 
| 0d 0h 11m 12s,0d 0h 6m 9s | 
+-----------------------------+ 

更新的全QUERY:

SELECT SQL_CALC_FOUND_ROWS live.id, live.user, live.player, 
SUBSTRING_INDEX(streams.channel, '_', -1) AS channel, bouquets.bouquet, 
DATE_FORMAT(live.playtime, '%H:%i:%s %d/%m/%Y') AS playtime,     
    (SELECT CONCAT(       
      TIMESTAMPDIFF(day, live.playtime, NOW()) , 'd ',         

      MOD(TIMESTAMPDIFF(hour, live.playtime, NOW()), 24), 'h ',       

      MOD(TIMESTAMPDIFF(minute, live.playtime, NOW()), 60), 'm ',       

      MOD(TIMESTAMPDIFF(second, live.playtime, NOW()), 60), 's'      
    ) FROM live GROUP BY live.id LIMIT 1) AS duration, 
resellers.nick, live.ip, servers.server, live.id, live.id    

FROM live LEFT JOIN streams ON live.stream=streams.id LEFT JOIN bouquets ON 
live.bouquet=bouquets.id LEFT JOIN resellers ON live.reseller=resellers.id 
LEFT JOIN servers ON live.server=servers.id   
ORDER BY live.id desc LIMIT 0, 10; 
+0

你試過添加'GROUP BY live.id'嗎? – FMashiro

+0

我已經嘗試過,然後mysql給我的錯誤,子查詢返回更多的1行...我有兩個選擇主查詢,所以這是子查詢 – John

+0

它現在返回什麼呢? – FMashiro

回答

1

假設有每個ID只有一條記錄,可以嘗試在嵌套SELECT查詢添加WHERE條款,如:

SELECT SQL_CALC_FOUND_ROWS live.id, live.user, live.player, 
SUBSTRING_INDEX(streams.channel, '_', -1) AS channel, bouquets.bouquet, 
DATE_FORMAT(live.playtime, '%H:%i:%s %d/%m/%Y') AS playtime,     
    (SELECT CONCAT(       
      TIMESTAMPDIFF(day, l.playtime, NOW()) , 'd ',         

      MOD(TIMESTAMPDIFF(hour, l.playtime, NOW()), 24), 'h ',       

      MOD(TIMESTAMPDIFF(minute, l.playtime, NOW()), 60), 'm ',       

      MOD(TIMESTAMPDIFF(second, l.playtime, NOW()), 60), 's'      
    ) FROM live l WHERE l.id = live.id) AS duration, 
resellers.nick, live.ip, servers.server, live.id, live.id    

FROM live LEFT JOIN streams ON live.stream=streams.id LEFT JOIN bouquets ON 
live.bouquet=bouquets.id LEFT JOIN resellers ON live.reseller=resellers.id 
LEFT JOIN servers ON live.server=servers.id   
ORDER BY live.id desc LIMIT 0, 10; 
+0

謝謝... 。live live l WHERE l.id = live.id解決了問題,現在所有行的計算都正確了..謝謝... – John