Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

07.02.2009, 20:23
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Для 2-х уровней Хелиос написал адекватный запрос (в отличии от большинства написанного в этом топике). Если же необходимо большее количество уровней (зачастую неопределенное) впринципе можно использовать хп, но понадобится минимум 2 курсора. Преимуществ здесь будет 2:
1) Сразу возвращаем полный и нужный нам результат
2) Сохраняется план выполнения данных запросов на серваке, что, при правильном подходе,
увеличит скорость работы.
|
|
|

07.02.2009, 20:36
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
Helios
спасибо, как раз то, что нужно.
я не знал что в in() можно передавать запрос.
VDShark
что такое хп и курсоры?
|
|
|

07.02.2009, 20:41
|
|
Постоянный
Регистрация: 19.03.2007
Сообщений: 684
Провел на форуме: 3152874
Репутация:
1020
|
|
Сообщение от Helios
Код:
SELECT *
FROM `comments`
WHERE `parent_id` = NULL
OR `parent_id` IN (
SELECT `id` FROM `comments` WHERE `parent_id` =NULL)
Я не вижу смысла выполнения этого запроса, критерии по которым выбераються данные при главном запросе идентичны тем которые идут в подзапросе, в итоге мы получаем тот же результат что и в основном запросе просто лишний раз проходим по таблице.
|
|
|

07.02.2009, 20:51
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Сообщение от AkyHa_MaTaTa
Я не вижу смысла выполнения этого запроса, критерии по которым выбераються данные при главном запросе идентичны тем которые идут в подзапросе, в итоге мы получаем тот же результат что и в основном запросе просто лишний раз проходим по таблице.
А если подумать немного?  Выполни такие запросы и посмотри результат, м.б. натолкнет на ответ.
> что такое хп и курсоры?
ХП - сокращение от Хранимые Процедуры. Т.е. код хранящийся на стороне сервера и вызываемый по имени. А курсоры - это, грубо говоря, аналог циклов трационных языков программирования (другими словами - способ перемещения по кортежам и работы с ними, указатель на полученное отношение). Ну это я попытался рассказать попонятнее... Но можешь прочитать об этом в той же википедии (хоть там и не особо расписано) - http://ru.wikipedia.org/wiki/Курсор_(базы_данных)
|
|
|

07.02.2009, 20:54
|
|
Постоянный
Регистрация: 19.03.2007
Сообщений: 684
Провел на форуме: 3152874
Репутация:
1020
|
|
Сообщение от VDShark
А если подумать немного?  Выполни такие запросы и посмотри результат, м.б. натолкнет на ответ.
Может это тебе зделать(прежде чем что писать я всгда проверяю свои слова).
|
|
|

07.02.2009, 20:57
|
|
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме: 1469995
Репутация:
589
|
|
Сообщение от AkyHa_MaTaTa
Я не вижу смысла выполнения этого запроса, критерии по которым выбераються данные при главном запросе идентичны тем которые идут в подзапросе, в итоге мы получаем тот же результат что и в основном запросе просто лишний раз проходим по таблице.
Запросы разные вообще-то и результаты выполнения их тоже разные, в чем можно убедиться, скормив запрос базе данных.
Подзапрос возвращает ID элементов в корне. А основной запрос делает выборку этих элементов и их потомков. Без подзапроса ты просто этих потомков не найдешь.
|
|
|

07.02.2009, 20:58
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Сообщение от AkyHa_MaTaTa
Может это тебе зделать(прежде чем что писать я всгда проверяю свои слова).
Видимо данные на которых ты проверял были не учитывающими данную ситуацию... в чем я сильно сомневаюсь. Поэтому необходимо включать соображалку хотя бы иногда, а не безосновательно буровить на людей.
|
|
|

07.02.2009, 21:01
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
а всё-таки есть проблема с таким подходом.
вот мой запрос:
PHP код:
SELECT *
FROM comment
WHERE tid =1
AND parentid IS NULL
OR parentid
IN (
SELECT cid
FROM comment
WHERE tid =1
AND parentid IS NULL
ORDER BY ctime ASC
)
ORDER BY ctime ASC
LIMIT 0 , 10
таким образом: сначала выполняется подзапрос. он возвращает ВСЕ id у которых tid=1 - ну типа комменты относятся к определенной теме.
а потом уже мы выбираем вложенные комменты к этим комментам.
но мне надо выбрать от n до m комментов в подзапросе, т.к. у меня пейджинг.
а mysql говорит что её версия (5.0.15-nt) не поддерживает limit в подзапросах..
как это исправить? есть ещё какие-то способы выполнить подзапрос, но с лимитом?
|
|
|

07.02.2009, 21:02
|
|
Постоянный
Регистрация: 19.03.2007
Сообщений: 684
Провел на форуме: 3152874
Репутация:
1020
|
|
Ну вобшето я даже и не предполагал на кого то буровить, если это так воспринял то извеняй, а теперь по делу, если тебе несложно покажи ту структуру данных при которых даный запрос будет работать, ибо как ты заметил моей сображалки не хватает, покажи плиз свою.
|
|
|

07.02.2009, 21:05
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Сообщение от AkyHa_MaTaTa
Ну вобшето я даже и не предполагал на кого то буровить, если это так воспринял то извеняй, а теперь по делу, если тебе несложно покажи ту структуру данных при которых даный запрос будет работать, ибо как ты заметил моей сображалки не хватает, покажи плиз свою.
Извиняю, надеюсь ты действительно не имел ввиду ничего дурного 
А по делу - если вообще не будет потомков (т.е. у всех записей будет pid=0), тогда вернутся идентичные рзультаты, иначе же будут утеряны родители (если запрос без where pid=0).
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|