@bioforge
Верстающий пыхер

Как вытащить последнюю запись из таблицы когда одна запись ссылается на другую в этой же таблице?

Добрый день.
Есть таблица с редиректами:
+------+------+
| from | to   |
+------+------+
|    1 |    3 |
|    3 |    4 |
|    4 |    5 |
|    6 |    7 |
+------+------+

В ней хранятся ID страниц. Проблема в том, что не получается вытащить запись, когда редирект сам является редиректом на другую страницу(их может быть сколько угодно).
Можно ли это решить силами mysql ?
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега MySQL
Mysql не умеет джойнить рекурсивно, так что просто решить эту задачу не получится.
Можно пойти тремя путями:
1. Определить максимальное количество редиректов и джойнить таблицу саму к себе это количество раз. Решение не очень элегантное, но самое простое.
2. Изменить структуру бд и хранить для каждой строки id реальной страницы. Наверное, это самое правильное решение, но его относительно сложно реализовать.
3. Обрабатывать эту логику скриптом, делая рекурсивные запросы. В лоб, но может быть прожорливо по ресурсам.
Ответ написан
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
можно, гуглите словосочетания Adjacency list, Matherialized Path, Nested sets, Closure Table не забывая подставлять слово MySQL, найдёте кучу описаний и кучу готовых реализаций.

Всё названное это оптимизированные варианты хранения деревьев в реляционных БД.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы