Wordpress - Получить количество постов и комментариев по дням - PullRequest
1 голос
/ 12 февраля 2011

Мне нужно оценить, сколько активности было в блоге Wordpress. Скажем, когда-нибудь будет 3 поста и 10 комментариев, баллы за пост равняются 10 и всего 1 за комментарий, затем в указанный день было в общей сложности 40 баллов. Тем не менее, могут быть некоторые дни без активности сообщений или без комментариев.

Моей первой идеей было простое LEFT JOIN из постов в таблицу комментариев. Однако это исключит дни без постов. Я не гуру MySQL, но я занимался исследованиями, и, кажется, лучший способ решить эту проблему - это FULL OUTER JOIN (, объясненный Джеффом Этвудом ), но MySQL не поддерживает это!

Тогда на самом деле есть обходной путь , но он не работает для меня. Кажется, что 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 бесполезен.

Что я делаю не так? Есть ли более простой способ сделать это?

Спасибо.

Примечание: вам придется добавлять несколько постов и комментариев в разные даты.

1 Ответ

0 голосов
/ 28 февраля 2011

Я думаю, что это не лучший запрос, который вы можете написать, но, похоже, он работает

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...