2011-02-11 77 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 
相关问题