ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #21  
Старый 07.02.2009, 21:11
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

PHP код:
SELECT *
FROM `comments`
WHERE `parent_id` = NULL
OR `parent_idIN (
    
SELECT `idFROM `commentsWHERE `parent_id` =NULL
AkyHa_MaTaTa
ты и меня смутил. но я понял в чем суть.
сначала вложенный запрос выбирает все комментарии первого уровня (как раз лимита на это я и не могу поставить)
затем основной запрос выбирает опять комментарии первого уровня (где парент_ид НУЛЛ) - это кстати совсем лишнее И выбирает комментарии второго уровня, у которых парент_ид лежит в области тех ид, что выбраны в самом начале.

убираем из основного запроса "WHERE `parent_id` = NULL", и каким-то образом добавляем лимит во вложенный запрос - вот то что необходимо для того, чтобы выбрать только нужные комменты и ВСЕ их подкомменты.
 
Ответить с цитированием

  #22  
Старый 07.02.2009, 21:17
oRb
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме:
7875940

Репутация: 2362
По умолчанию

Дикс, если есть возможность изменить структуру таблицы, тогда советую почитать про nested sets. Этот метод очень хорош для выборки поддерева.
 
Ответить с цитированием

  #23  
Старый 07.02.2009, 21:25
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме:
1469995

Репутация: 589
Отправить сообщение для Helios с помощью ICQ
По умолчанию

Если убрать проверку на `parent_id` = NULL из основного запроса, то ты получишь только комментырии второго уровня.

Подзапрос не выбирает комментарии первого уровня, он только находит их идентификаторы, по которым мы выбираем комменты второго уровня.

Как я понял, ты берешь на страницу N комментариев первого уровня и всех их потомков. В таком случае вижу два выхода:
Первый из них - выбирать все и брать нужное средствами PHP, что совсем не айс. Потому метод отбрасываем.

Второй - все таки разделить на два запроса:
Код:
SELECT * FROM `comments` WHERE `parent_id` = NULL AND `t` = '1' LIMIT 0,5
Для выбора комментов первого уровня. Также сз полученных данных выбираешь id этих комментов и составляешь второй запрос:
Код:
SELECT * 
FROM `comments` 
WHERE `parent_id` IN ( $id_list )
И уже отсюда выбираешь комменты второго уровня.

Решение не из самых красивых, но это все же не рекурсия - влаживаем все в два запроса.
 
Ответить с цитированием

  #24  
Старый 07.02.2009, 21:27
astrologer
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме:
3069349

Репутация: 808


По умолчанию

Цитата:
Сообщение от oRb  
Дикс, если есть возможность изменить структуру таблицы, тогда советую почитать про nested sets. Этот метод очень хорош для выборки поддерева.
Этот метод действительно хорош для статичных деревьев, а дерево комментариев, очевидно, таким не является.
 
Ответить с цитированием

  #25  
Старый 08.02.2009, 10:02
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

http://forum.ixbt.com/topic.cgi?id=26:39140
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
F.A.Q по Пранку Nightmarе Статьи 43 28.03.2010 10:55
FAQ по выделенным серверам †Romi4† Авторские статьи 4 31.08.2009 16:19
Социальная инженерия. Профессиональное программирование. Последовательный взлом dinar_007 Болталка 15 23.12.2008 12:30



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ