Intereting Posts
PHP SQLSRV: работает ли sqlsrv_query (), чтобы подготовить оператор select, правильно? Symfony2 / Doctrine: как повторно сохранить объект с OneToMany в качестве каскадной новой строки Время начала и окончания, разделенное на 1 час сегментов Как удалить символ \ ufeff в моих сценариях веб-страницы? PHP: как найти наиболее используемый ключ массива? Как добавить столбец в таблицу с использованием миграции laravel 5 без потери данных? Получение выбранной даты с помощью выбора даты в календаре Ошибка загрузки Google App Engine для PHPExcel Как сделать снимок скриншотов веб-сайтов с помощью PHP? Колонка не найдена: 1054 Unknown column laravel PHP – выполнить веб-скрипт как сценарий командной строки? Когда использовать filter_input () Попытка заставить MySQL подключаться через php в JSON, но возвращая ошибки, связанные с MySQL из php-скрипта Ошибка CodeIgniter: «Запрошенное действие не разрешено». Функция Javascript, допускающая переменные PHP

WordPress – Получить количество сообщений и комментариев по дням

Мне нужно весить, сколько активности было в блоге 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 бесполезно.

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

Благодарю.

Примечание. Вам нужно будет добавить несколько сообщений и комментариев в разные даты.

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

 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