Нашёл простое решение, как исправить неработающий WordPress-плагин Recent Commenters and commented on. Вместо последних откомментированных постов он выдавал какую-то фигню, с первого взгляда похожую на недавно комментированные посты, но на самом деле ими не являющуюся.
Пришлось отлаживать. Довольно быстро я выяснил, что список по странному критерию выдаёт MySQL в ответ на этот SQL-запрос:
SELECT DISTINCT posts.ID, comments.comment_post_ID, posts.post_title FROM comments, posts WHERE posts.ID = comments.comment_post_ID AND comment_approved = '1' AND post_status = 'publish' ORDER BY comment_ID DESC LIMIT 10
Проблема: в селекте сначала срабатывает DISTINCT, а только потом ORDER BY. В результате получаем не последние откомментированные посты, а посты, которые позже всех начали комментировать.
Решение: в ORDER BY пишем именно то, что имеем в виду, не предоставляя мускулю возможности неправильно догадываться о наших желаниях, а вместо DISTINCT применяем GROUP BY, потому что DISTINCT и MAX вместе не живут.
SELECT MAX(comment_ID) AS commentID, posts.ID, comments.comment_post_ID, posts.post_title FROM comments, posts WHERE posts.ID = comments.comment_post_ID AND comment_approved = '1' AND post_status = 'publish' GROUP BY posts.ID ORDER BY commentID DESC LIMIT 10
Горжусь собой.
Technorati Tags: программизм SQL движки WordPress debug





