2011-02-11 79 views
1

我需要重量多少活動已經在一個WordPress的博客。假設有一天有3個帖子和10個評論,評論中評爲10分,評論評分僅爲1分,然後說當天共有40分。但是,可能會有幾天沒有發佈任何活動或沒有評論活動。WordPress的 - 獲取帖子數量和白天的評論

我的第一個想法是從帖子到評論表的一個簡單的LEFT JOIN。但是,這將排除沒有帖子的日子。我不是MySQL大師,但我一直在研究,似乎解決這個問題的最好方法是使用FULL OUTER JOINexplained by Jeff Atwood),但MySQL不支持這一點!

然後,實際上有a workaround,但它不適合我。看起來RIGHT OUTER JOIN沒有返回我所需要的。
這是LEFT之一,它的作品相當不錯。

SELECT 
    DISTINCT DATE(post_date) AS day, 
    COUNT(ID) AS post_total, 
    COUNT(comment_ID) as comment_total, 
    (COUNT(ID)*10 + COUNT(comment_ID)*1) AS total 
FROM wp_posts 
    LEFT OUTER JOIN wp_comments ON 
     DATE(post_date) = DATE(comment_date) 
GROUP BY day ORDER BY total DESC 

但是RIGHT之一有問題。

SELECT 
    DISTINCT DATE(post_date) AS day, 
    COUNT(ID) AS post_total, 
    COUNT(comment_ID) as comment_total, 
    (COUNT(ID)*10 + COUNT(comment_ID)*1) AS total 
FROM wp_posts 
    RIGHT OUTER JOIN wp_comments ON 
     DATE(post_date) = DATE(comment_date) 
GROUP BY day ORDER BY total DESC 

因此,UNION解決方法是無用的。

我在做什麼錯?有沒有更簡單的方法來做到這一點?

謝謝。

注意:您必須在不同日期添加一些帖子和評論。

+0

除非你犯了一個錯字,當你轉錄本,問題與你的右連接是它是一個左連接... – 2011-02-11 23:37:55

回答

0

我覺得這是不是你可以寫的最好的查詢,但似乎工作

CREATE VIEW commentsCount (date, counter) AS 
SELECT 
    DISTINCT DATE(comment_date) AS date, 
    IFNULL(COUNT(comment_ID),0) AS total 
FROM wp_comments 
GROUP BY date ORDER BY total DESC 

CREATE VIEW postsCount (date, counter) AS 
SELECT 
    DISTINCT DATE(post_date) AS date, 
    IFNULL(COUNT(ID),0) AS total 
FROM wp_posts 
GROUP BY date ORDER BY total DESC 

SELECT 
    postsCount.date, 
    IFNULL(postsCount.counter,0), 
    IFNULL(commentsCount.counter,0), 
    (IFNULL(postsCount.counter,0)*10 + IFNULL(commentsCount.counter, 0)) 
FROM commentsCount RIGHT JOIN postsCount 
    ON DATE(postsCount.date) = DATE(commentsCount.date) 
GROUP BY postsCount.date 
union 
SELECT 
    commentsCount.date, 
    IFNULL(postsCount.counter,0), 
    IFNULL(commentsCount.counter,0), 
    (IFNULL(postsCount.counter,0)*10 + IFNULL(commentsCount.counter, 0)) 
FROM commentsCount LEFT JOIN postsCount 
    ON DATE(postsCount.date) = DATE(commentsCount.date) 
GROUP BY commentsCount.date 
相關問題