Задать вопрос
amux
@amux
alp.ac

Как составить запрос Mysql запрос не используя WITH?

Есть табличка
| id | email | partner_id |
partner_id -> это связь с записью из этой-же таблицы
Задача, узнать всех нижестоящих "партнеров", при этом получить уровень глубины, на котором они находятся.

MySql Не поддерживает WITH, Как переписать запрос под MYSQL?
WITH list AS
 (SELECT upper.id, upper.email, upper.partner_id,
 1 AS level
 FROM users AS upper
 WHERE upper.partner_id IS NULL

 UNION ALL

 SELECT lower.id, lower.email lower.partner_id,
 el.level + 1
 FROM users AS lower
 INNER JOIN list AS el
 ON lower.partner_id = el.id
 WHERE lower.partner_id IS NOT NULL)
SELECT * 
FROM list;
  • Вопрос задан
  • 143 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Stepik
    PRO C#. Базы данных
    2 месяца
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Java-разработчик + ИИ
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега MySQL
with работает рекурсивно - делать тысячи запросов очень неэффективно.
Правильнее изменить структуру таблицы. Гуглите "хранение дерева в БД"

Или хотя бы сделайте один полный select и далее на вашем ЯП (например, PHP) постройте массив-дерево.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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