[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать рекурсивный запрос?
Страницы: 1, 2, 3
Эли4ка
Добрый вечер. Возник такой вопрос. Есть такая табличка с данными:
user posted image
То есть в поле to_id содержиться указатель на id. Эдакая рекурсия.
Нужно вывести строку в таком виде:дерево->бумага->книга или руда->железо->сталь.
Для дерево->бумага сделала через джоин так:

SELECT * FROM table AS t1 LEFT JOIN table AS t3 ON t1.to_id = t3.id;

Как сделать для трех и более не соображу никак. Еще проблема в том, что рекурсия не изветсно какая. Может быть 2 а может быть и 5.
решаемо ли это через MySQL?
Просьба графоориентированые Бд не советовать.
Спасибо.
Master812
Эли4ка, Foreign Key
Эли4ка
И забыла написать-у меня не 8 MySQL.
Эли4ка
Цитата (Master812 @ 26.03.2019 - 20:49)
Эли4ка, Foreign Key

Ничего, что я про одну таблицу написала. Ключ для двух таблиц и тут он не уместен.

P.S. Возникла идея с WHILE но как его сделать не придумаю.
Эли4ка
Сделать так,хотя это в плане бреда
select      p6.parent_id as parent6_id,
p5.parent_id as parent5_id,
p4.parent_id as parent4_id,
p3.parent_id as parent3_id,
p2.parent_id as parent2_id,
p1.parent_id as parent_id,
p1.id as product_id,
p1.name
from products p1
left join products p2 on p2.id = p1.parent_id
left join products p3 on p3.id = p2.parent_id
left join products p4 on p4.id = p3.parent_id
left join products p5 on p5.id = p4.parent_id
left join products p6 on p6.id = p5.parent_id
..
Zzepish
Если уж сильно упарываться в SQL - я бы напедалил функцию с обычной рекурсией, имхо.
Но, обычно, я потом разбирал все на php
Эли4ка
Цитата (Zzepish @ 26.03.2019 - 21:14)
Но, обычно, я потом разбирал все на php

Рекурсию?
Эли4ка
Типо BlueM?
Kusss
через MySQL не решаемо наверно.
а вот разбор на сервере - не проблема. Хлебный крошки (breadcrumb) называется )
Zzepish
Эли4ка
Что за задача. Обычно такое не педалят на огромных таблицах (ибо тупо стремно).
Если что-то мелокое - да, на php адекватнее было бы разобрать выбрав все элементы таблицы

Kusss
Все везде решаемо. Ты как минимум забываешь про хранимые процедуры. Вопрос адекватности или необходимости подобной реализации. Я бы на уровне базы с большим набором данных такое делать не рискнул бы
Эли4ка
Цитата (Kusss @ 26.03.2019 - 21:56)
Хлебный крошки (breadcrumb) называется )

да, я слышала про них, они мне не подходят.
Цитата
через MySQL не решаемо наверно.

Есть одна идея, распишу ее, а завтра может и решение придумаю(или окончательно смогу убедиться, что его нет), так вот:конечный to_id имеет null(в моем случае, можно так же использовать 0 и другие варианты) надо делать запрос с джоином на 2 таблицы до тех пор, пока to_id будет не равен null. То есть два запроса:
SELECT * FROM table AS t1 LEFT JOIN table AS t3 ON t1.to_id = t3.id;

Это рекурсивно спускаемся и
SELECT * FROM table AS t1 LEFT JOIN table AS t3 ON t1.to_id = null;

для корня. Но как их сделать вместе, вот проблема.
так, где Рон?! он же все знает,быстро тут все решил бы.
Эли4ка
Цитата (Zzepish @ 26.03.2019 - 22:26)
Что за задача. Обычно такое не педалят на огромных таблицах (ибо тупо стремно).

Задача выборки цепочки. От 2 до 5 звеньев.
Цитата (Zzepish @ 26.03.2019 - 22:26)
Если что-то мелокое - да, на php адекватнее было бы разобрать выбрав все элементы таблицы

Скажу честно-лень делать это в php. пускай на такую простоту работает MySQL.
записей будет до 1млн, не больше.
Цитата (Zzepish @ 26.03.2019 - 22:26)
Я бы на уровне базы с большим набором данных такое делать не рискнул бы

Вот хотелось бы обоснование.
Kusss
Цитата (Эли4ка @ 26.03.2019 - 23:32)
да, я слышала про них, они мне не подходят.

это ещё почему не подходит то ?
Если скинешь дамп таблицы - напишу.
Цитата (Zzepish @ 26.03.2019 - 23:26)
Ты как минимум забываешь про хранимые процедуры

я про них не забываю. Я вообще не знаю что это за "фрукты" smile.gif
Эли4ка
Цитата (Kusss @ 26.03.2019 - 22:36)
это ещё почему не подходит то ?
Если скинешь дамп таблицы - напишу.

завтра доберусь до нужной БД и скину
Kusss
А от чего пляшем то. Нужно получить всех предшественников или потомков ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.