PHP: SELECT * FROM `comments` WHERE `parent_id` = NULL OR `parent_id` IN ( SELECT `id` FROM `comments` WHERE `parent_id` =NULL) AkyHa_MaTaTa ты и меня смутил. но я понял в чем суть. сначала вложенный запрос выбирает все комментарии первого уровня (как раз лимита на это я и не могу поставить) затем основной запрос выбирает опять комментарии первого уровня (где парент_ид НУЛЛ) - это кстати совсем лишнее И выбирает комментарии второго уровня, у которых парент_ид лежит в области тех ид, что выбраны в самом начале. убираем из основного запроса "WHERE `parent_id` = NULL", и каким-то образом добавляем лимит во вложенный запрос - вот то что необходимо для того, чтобы выбрать только нужные комменты и ВСЕ их подкомменты.
Дикс, если есть возможность изменить структуру таблицы, тогда советую почитать про nested sets. Этот метод очень хорош для выборки поддерева.
Если убрать проверку на `parent_id` = NULL из основного запроса, то ты получишь только комментырии второго уровня. Подзапрос не выбирает комментарии первого уровня, он только находит их идентификаторы, по которым мы выбираем комменты второго уровня. Как я понял, ты берешь на страницу N комментариев первого уровня и всех их потомков. В таком случае вижу два выхода: Первый из них - выбирать все и брать нужное средствами PHP, что совсем не айс. Потому метод отбрасываем. Второй - все таки разделить на два запроса: Code: SELECT * FROM `comments` WHERE `parent_id` = NULL AND `t` = '1' LIMIT 0,5 Для выбора комментов первого уровня. Также сз полученных данных выбираешь id этих комментов и составляешь второй запрос: Code: SELECT * FROM `comments` WHERE `parent_id` IN ( $id_list ) И уже отсюда выбираешь комменты второго уровня. Решение не из самых красивых, но это все же не рекурсия - влаживаем все в два запроса.
Этот метод действительно хорош для статичных деревьев, а дерево комментариев, очевидно, таким не является.