2016-07-17 49 views
1

我有一個名爲的mysql列time_on_site
列存儲爲一個變量H:M:SMYSQL:在一個組中的varchar y:m:d的平均數

目前在我的代碼,我有以下幾點:

foreach($db->query("SELECT country,siteID,referring_site,COUNT(country) 
    AS thecount,COUNT(distinct country) 
    FROM rotator_tracking WHERE siteID='$_GET[site]' 
    GROUP BY country, referring_site ORDER BY thecount ASC") as $row) { 

    if (isset($row['referring_site'])) { 
     echo ' 
     <tr> 
      <td class="country" style="padding: initial;"> 
      ' . $row['referring_site'] . ' 
      </td>'; 
    } else { 
     echo ' 
     <tr> 
      <td class="country" style="padding: initial;"> 
      Unknown 
      </td>'; 
    } 

     echo ' 
      <td class="country_referral" style="padding: initial;"> 
      ' . $row['country'] . ' 
      </td>';  

     echo ' 
      <td class="country_referral" style="padding: initial;"> 
      ' . $row['thecount'] . ' 
      </td>';  

     echo ' 
      <td class="country_referral" style="padding: initial;">' . 
      $row['COUNT(distinct country)'] . ' 
      </td> 
     </tr>'; 
} 

我試圖找出如何做的是添加另一td根據國家和引用網站分組使用time_on_site中的值顯示網站上的平均時間。

所以有效的表應該循環:

參考網站:國家:總訪問量:獨特的訪問:在現場的平均時間

因爲日期是可變格式的,似乎其沒有那麼容易,只是總和和總分。幫幫我?我應該怎麼做?

+0

我不知道如何從SQL查詢中進行算術運算,因爲'time_on_site'存儲爲字符串。我可能會在獲取所有結果到PHP中的數組,字符串轉換爲數字,做算術和結果顯示在我想要使用的格式。 – BeetleJuice

+1

只是一個普遍的說明,你應該永遠不要像你所做的那樣信任用戶輸入。它被稱爲[SQL注入](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – Machavity

+0

我不知道你指的是什麼INPUT ...是它的$ _GET ['id'] ??如何確定用戶希望從哪個站點獲得跟蹤信息?除此之外,除了通過訪問url之外,沒有收集用戶數據。並授予大多數事情通過瀏覽器可以被欺騙過,但那是沒有理由停止跟蹤,普通用戶沒有欺騙細節....認真我不知道用戶輸入你指的是。 – Bruce

回答

0

所以我花了很多時間試圖解決這個問題。最終,解決方案相當簡單。

由於格式已經是hh:mm:ss,因此不需要將其保存爲varchar,因此我只是將類型從varchar更改爲時間。

之後,它非常標準。

SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(`time_on_site`))) 
AS timeSum, country,siteID,referring_site,COUNT(country) 
AS thecount,COUNT(distinct country) 
FROM rotator_tracking 
WHERE siteID=':site' 
GROUP BY country, referring_site 
ORDER BY thecount ASC