![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
tot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
Есть таблица хранящая древовидную структру. В ней хранятся id родителя и дочерней записи. Нужно получить дополнительную информацию и о родителе и о предке. Сейчас приходится это делать двойным обращением к таблице. В первом обращении выбирается все для родителя, во втором обращении все для потомка. Получается примерно так:
Как можно сделать тоже самое не прибегая к подчиненому запросу? |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
через UNION
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
tot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
И как это(пример если можно)? UNION объединит результат нескольких выборок в одну, а мне нужно получить имя родительского и дочернего объекта в одной строке результат. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
не совсем понял, что тебе надо.
возможно, тебе надо присоединить(JOIN) одну и ту же таблицу дважды с разными параметрами связки. тогда тебе помогут алиасы(псевдонимы).
по крайней мере, получается то же, что и твой запрос, но без подзапроса. если тебе нужно другое, то, будь добр, объясни внятнее. |
|||
|
||||
tot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
Да, это именно тоже самое(это я и хочу). Но разве в этом запросе не происходит двойного обращения к таблице table(два раза делаем JOIN)? |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
А у меня всегда были проблемы с телепатией. Кстати, как ты намереваешься выводить все в ОДНОЙ строке? для тех, у кого НЕСКОЛЬКО потомков? а если еще и несколько родителей... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
tot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
Одна строка результата будет содержать имя родителя и имя потомка. Если у одного родителя N потомков, то N строк результата и будет. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
А смысл? по моему, вывод по типу
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
tot |
|
||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
Если честно я не понял что ты написал. У меня конкретный вопрос. Я в своем первом сообщении привел код, вот и хочу узнать можно получить тот же самый результат не используя подчиненый запрос, т.е. не включая одну и туже таблицу два раза(т.е. как оптимальнее написать этот запрос). |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
можно, skyboy дал код. а вот это - нет. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
я же привел код. чем не устраивает? связь по разным полям для двух разных случаев. все равно, явно или неявно, будет дважды обработка таблицы. оптимальность - она не в количестве обращений к таблицам. и не в наличии/отсутствии подзапросов. оптимальность - во времени выполнения или в занимаемой при выполнении памяти. сделай замеры и сравни. |
|||
|
||||
tot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
Всем устраивает. Спасибо. А замеры действительно надо будет сделать. |
|||
|
||||
vi_k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 29.12.2007 Репутация: нет Всего: нет |
А действительно ли нужно использовать отдельную таблицу `tree`? Если у потомка только один родитель - достаточно добавить в `table` поле `parent_id`, imho, конечно.
Добавлено через 14 минут и 16 секунд И соответственно запрос упрощается:
|
|||
|
||||
vi_k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 29.12.2007 Репутация: нет Всего: нет |
Тогда и всех родителей родителей легко можно вытащить
![]()
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |