【问题标题】:Wordpress - Get number of posts AND comments by dayWordpress - 按天获取帖子和评论的数量
【发布时间】:2011-06-25 20:31:49
【问题描述】:

我需要衡量 Wordpress 博客中的活动量。比如说,某天有3个帖子,10个cmet,一个帖子的积分是10分,评论只有1分,那么说一天总共有40分。但是,有些日子可能没有发布活动或没有评论活动。

我的第一个想法是一个简单的LEFT JOIN 从帖子到 cmets 表。但是,这将排除没有帖子的日子。我不是 MySQL 专家,但我一直在研究,似乎解决这个问题的最好方法是使用 FULL OUTER JOIN (explained 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 解决方法是无用的。

我做错了什么?有没有更简单的方法来做到这一点?

谢谢。

注意:您必须在不同的日期添加一些帖子和 cmets。

【问题讨论】:

  • 除非您在转录时打错字,否则您的 RIGHT JOIN 的问题是它是 LEFT JOIN...
  • 是的,这是一个错字。对不起。

标签: php mysql wordpress join


【解决方案1】:

我认为这不是你能写的最好的查询,但似乎可以工作

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多