Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > MySQL > Выборка из одной таблицы несколько раз одновремено |
Автор: tot 25.12.2007, 09:40 | ||
Есть таблица хранящая древовидную структру. В ней хранятся id родителя и дочерней записи. Нужно получить дополнительную информацию и о родителе и о предке. Сейчас приходится это делать двойным обращением к таблице. В первом обращении выбирается все для родителя, во втором обращении все для потомка. Получается примерно так:
Как можно сделать тоже самое не прибегая к подчиненому запросу? |
Автор: Akina 25.12.2007, 10:28 |
через UNION |
Автор: tot 25.12.2007, 10:40 | ||
И как это(пример если можно)? UNION объединит результат нескольких выборок в одну, а мне нужно получить имя родительского и дочернего объекта в одной строке результат. |
Автор: skyboy 25.12.2007, 11:00 | ||
не совсем понял, что тебе надо. возможно, тебе надо присоединить(JOIN) одну и ту же таблицу дважды с разными параметрами связки. тогда тебе помогут алиасы(псевдонимы).
по крайней мере, получается то же, что и твой запрос, но без подзапроса. если тебе нужно другое, то, будь добр, объясни внятнее. |
Автор: tot 25.12.2007, 11:27 | ||
Да, это именно тоже самое(это я и хочу). Но разве в этом запросе не происходит двойного обращения к таблице table(два раза делаем JOIN)? |
Автор: tot 25.12.2007, 12:54 | ||||
Одна строка результата будет содержать имя родителя и имя потомка. Если у одного родителя N потомков, то N строк результата и будет. |
Автор: Akina 25.12.2007, 13:01 | ||
А смысл? по моему, вывод по типу
|
Автор: tot 25.12.2007, 13:26 | ||||
Если честно я не понял что ты написал. У меня конкретный вопрос. Я в своем первом сообщении привел код, вот и хочу узнать можно получить тот же самый результат не используя подчиненый запрос, т.е. не включая одну и туже таблицу два раза(т.е. как оптимальнее написать этот запрос). |
Автор: Akina 25.12.2007, 13:37 | ||
можно, skyboy дал код. а вот это - нет. |
Автор: skyboy 25.12.2007, 13:39 |
я же привел код. чем не устраивает? связь по разным полям для двух разных случаев. все равно, явно или неявно, будет дважды обработка таблицы. оптимальность - она не в количестве обращений к таблицам. и не в наличии/отсутствии подзапросов. оптимальность - во времени выполнения или в занимаемой при выполнении памяти. сделай замеры и сравни. |
Автор: tot 25.12.2007, 14:13 | ||
Всем устраивает. Спасибо. А замеры действительно надо будет сделать. |
Автор: vi_k 29.12.2007, 10:17 | ||
А действительно ли нужно использовать отдельную таблицу `tree`? Если у потомка только один родитель - достаточно добавить в `table` поле `parent_id`, imho, конечно. Добавлено через 14 минут и 16 секунд И соответственно запрос упрощается:
|
Автор: vi_k 29.12.2007, 10:35 | ||
Тогда и всех родителей родителей легко можно вытащить ![]()
|