Почему не работает LIMIT в подзапросе - для профи SQL

Рейтинг: 0Ответов: 1Опубликовано: 26.10.2014
SELECT c.*, ar.ArticleName, ar.idArticle, du.DetailToUsersName, du.DetailToUsersPhoto, COUNT(c.idCommentToArticle) AS CNT, CASE WHEN d.Count IS NULL THEN 0 ELSE d.Count END AS CountLikes 
    FROM commenttoarticle c

    INNER JOIN (SELECT CommentToArticlePID FROM commenttoarticle 
    GROUP BY CommentToArticlePID 
    ORDER BY CommentToArticlePID LIMIT 3) AS articleComments

    LEFT JOIN article ar ON c.CommentToArticleIdArticle = ar.idArticle 
    LEFT JOIN detailtousers du ON du.idDetailToUsers = c.CommentToArticleIdUser 
    LEFT JOIN `likes` d ON (d.IdNote = c.idCommentToArticle AND d.LikeType = 6)

    WHERE c.CommentToArticleIdArticle = 11 
    GROUP BY c.idCommentToArticle

Почему-то оператор LIMIT 3 в суб-запросе не работает... Сейчас этот запрос показывает все строки из таблицы commenttoarticle

Отредактированная версия:

    SELECT c.*, ar.ArticleName, ar.idArticle, du.DetailToUsersName, du.DetailToUsersPhoto, COUNT(c.idCommentToArticle) AS CNT, CASE WHEN d.Count IS NULL THEN 0 ELSE d.Count END AS CountLikes

from (select * from commenttoarticle inner join (select distinct(idCommentToArticle) from commenttoarticle order by CommentToArticlePID limit 3) as ac using(CommentToArticlePID)) as c

LEFT JOIN article ar ON c.CommentToArticleIdArticle = ar.idArticle LEFT JOIN detailtousers du ON du.idDetailToUsers = c.CommentToArticleIdUser LEFT JOIN `likes` d ON (d.IdNote = c.idCommentToArticle AND d.LikeType = 6) WHERE c.CommentToArticleIdArticle = 11 GROUP BY c.idCommentToArticle ORDER BY c.idCommentToArticle DESC

Ругается так:

Unknown column 'CommentToArticlePID' in 'from clause'

Ответы

▲ 1Принят

А зачем Вам Group By? Попробуйте заменить на distinct.

Попробуйте пересечение вложить во внутрь:

select ... from (select * from commenttoarticle inner join (select distinct from commenttoarticle order by CommentToArticlePID limit 3) as ac using(CommentToArticlePID)) as c left join ...

Обновление

Да, ac должно быть правильнее. Можно, конечно, и вообще без юзинга.

И как, помогло? Я бы для начала определил - это мускул не воспринимает лимит при перемножении, или всё же у вас дополнительные джойны и прочее всё портят.