ну, если вы хотите сворачивать/разворачивать коммент(-ы), то на такую операцию по любому придется отдельный запрос реализовывать (конечно, для эффективности, можно с кешированием на сервере, например, если на java, то делаем аля cacheЧто-тотам-ежббин). а если вы у вас есть сущность - пост, т.е. таблица с комментами, где сам первый пост - это тоже коммент - , то в таком случае делают доп.поля ссылки на пост - parentId (у головного поста-коммента он будет равен 0). не знаю, что за база у вас. но вот в оракле такие игрушки (начиная, вроде с 9ой или 10ой версии) реализуются с помощью специальных встроенных средств - посмотрите примеры с ф-цией RPAD (с указанием ей LEVEL), конструкциями "CONNECT_BY_ISLEAF as IsLeaf", "start with вашеПолеParent_ID = 1 " и слова "siblings". собственно RPAD и siblings в оракле дают возможность построить иерархический запрос. в других субд будет что-то свое (если они такие продвинутые окажутся)
Не все так страшно. Конечно, отсутствие в MySQL ораклевой конструкции connect by prior немного усложняет, но только немного.
Далее - в том, чтобы делать несколько запросов к базе тоже ничего страшного нет. Кроме того, логически пост от комментария ничем не отличается, и там и там текст, дата, автор. Поэтому, ориентируемся по трем полям: идентификатор сообщения, ссылка на родительское сообщение (если NULL - то это корень, то есть пост и сквозная ссылка на пост)
Каждая запись имеет идентификатор + ссылку на родителя. Далее, вытаскивать по рекурсии:
Вытащить корневые сообщения: select pole1,pole2,.. from my_table where parent_id is null
вытащить комменты первого уровня для корневого сообщения - select pole1,pole2 from my_table where parent_id = чему_то там
вытащить весь блок: select pole1,pole2,.. from my_table where trend_id = чему_то там
при этом parent_id - ссылка на идентификатор родительского коммента, NULL для корня.
trend_id - ссылка на корень