2013-04-11 28 views
-1

我需要獲得每位成員每天發佈的平均評論數的一些幫助。我想要使​​用mysql查詢而不是在php中使用多個查詢和計算。MySQL:如何獲得每位成員每天發佈的評論?

這些表及其字段:

  1. 成員
    • NUM(初級)
    • createdDate(時間戳)
  2. 帖子
    • NUM(初級)
    • 創建dDate(時間戳)
    • member_num
  3. 評論
    • NUM(主)
    • createdDate(時間戳)
    • member_num
    • posts_num

這是可能的使用單個查詢或最小化來獲得像這樣的結果:

+--------------+------------------------+ 
| member_num | avg_comments_per_day | 
+--------------+------------------------+ 
| 5   | 10     | 
+--------------+------------------------+ 
| 24   | 7      | 
+--------------+------------------------+ 
| 33   | 5      | 
+--------------+------------------------+ 
| 8   | 1      | 
+--------------+------------------------+ 
| 9   | 1      | 
+--------------+------------------------+ 

任何幫助將不勝感激。謝謝!

+0

我無法創建我的代碼,我不知道從哪裏開始,所以我在這裏尋求幫助。 –

回答

2

你可以寫:

SELECT member_num, 
     COUNT(1)/COUNT(DISTINCT CAST(createdDate AS DATE)) AS avg_comments_per_day 
    FROM comments 
GROUP 
    BY member_num 
; 

這將會給每個用戶,通過該用戶已發佈任何評論的總天數除以意見總數。 (這似乎是的「平均」如果你想要的東西不同,請澄清最簡單的概念。)

(免責聲明:沒有測試)

0

爲了做到這一點,你需要有一個表與所有可能的日期,你可以加入反對。所以像這樣:

dates table 
-------------- 

date 
2001-01-01 
2001-01-02 
... 
2030-12-31 

顯然你可以根據需要調整開始和結束日期。您需要這樣做的原因是您需要有一種方法來計算使用中有0條評論的日期,這些評論不會顯示在您的評論表中。

然後,您需要加入這個表,您的意見表:

SELECT 
    c.member_num AS `member`, 
    d.`date` AS `date`, 
    COUNT(c.num) AS `count` 
FROM dates AS d 
LEFT OUTER JOIN comments AS c 
    ON d.`date` = DATE(c.createdDate) 
WHERE d.`date` BETWEEN '????-??-??' AND '????-??-??' 
GROUP BY `member`, `date` 

請注意,我在這裏添加的日期範圍,所以你只能在你感興趣的期間計算平均沒有做這樣,您將獲得日期表中所有日期的平均值。當然這隻會讓你成爲你的一部分。你仍然需要平均此信息,所以在最終的查詢使用上面的查詢作爲子查詢:

SELECT 
    `member`, 
    AVG(`count`) AS `daily_average` 
FROM 
    (SELECT 
     c.member_num AS `member`, 
     d.`date` AS `date`, 
     COUNT(c.num) AS `count` 
    FROM dates AS d 
    LEFT OUTER JOIN comments AS c 
     ON d.`date` = DATE(c.createdDate) 
    WHERE d.`date` BETWEEN '????-??-??' AND '????-??-??' 
    GROUP BY `member`, `date`) AS `comment_counts` 
GROUP BY `member` 

當然,這個查詢將執行確實不好,因爲你不會被使用在加入一個指標評論和日期之間。如果您需要定期執行此查詢,我的建議是實際構建一個表,您可以在其中正確更新評論計數統計信息。

0

ruakh's或mike的方法應該適合您的情況。

但是,您應該考慮將這些信息存儲在單獨的表中,您可以在每條評論或每天一次(或兩者)上更新。假設一個用戶每天寫10條帖子,然後每年在網站上寫了10年(或更少)的3650條評論,那麼這個單一用戶就有365000條評論。計算每天的平均評論時間,在符文時間內,可能會在計算時間內增加upp,尤其是如果您必須爲很多用戶每天多次執行此操作。

因此,而不是計算平均每天的意見,每次你需要的數據,那麼就必須有

userId 
avgComments 

它更有效地獲取該單一指標,而不是做計算一個單獨的表每一次你需要這些數據。