2016-04-23 10 views
4

Вот что у меня в MySQL DB таблице:Каков наиболее эффективный способ получить последнюю ветку из таблицы SQL с определенным корнем?

id | parent | name 
---------------------- 
1 | null | Root 1 
3 | null | Root 3 
6 | 3  | something 1 
7 | 6  | something 2 
9 | 1  | something 3 

Я хотел бы получить самую последнюю ветвь из таблицы. Прямо сейчас я просто проверяю для самого высокого id и следую за пунктами к корню в коде.

В моем случае я могу предположить, что последняя запись всегда является концом ветви, а не срединной ветвью или корнем.

Проблема заключается в том, чтобы получить самый новый из определенного корня. Итак, скажем, мне нужна последняя ветвь корня 3. Как мне это сделать?

Есть ли способ, которым я могу запросить это в SQL, без необходимости делать рекурсивные циклы на PHP, пока не найду то, что мне нужно?

Изменение способа хранения дерева в SQL в настоящее время не является вариантом. :(

+0

http://stackoverflow.com/questions/12796113/mysql-how-to- find-leaves-in-specific-node Это может решить вашу проблему – Naruto

+1

Не совсем, нет. Измените свою модель данных или напишите sproc или присоединитесь к таблице так часто, как это может потребоваться, или используйте код уровня приложения для обработки рекурсии, как вы предложили. – Strawberry

ответ

1

Я предлагаю, чтобы добавить новый столбец с указанием полного пути к этому конкретному узлу:.

id | parent | name   | path 
----------------------------------- 
1 | null | Root 1  | 0|1 
3 | null | Root 3  | 0|3 
6 | 3  | something 1 | 0|3|6 
7 | 6  | something 2 | 0|3|6|7 
9 | 1  | something 3 | 0|1|9 

Это не изменяет существующие данные, то это будет только расширить его Этот подход проще, чем рекурсии или хранимые процедуры в вычислительный раз Если вам нужно последняя для отрасли 3 вы будете делать это и получить последний узел непосредственно:.

SELECT id FROM table where path like "0|3%" 
ORDER BY path DESC LIMIT 1 

 Смежные вопросы

  • Нет связанных вопросов^_^