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;
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега MySQL
Web developer
with работает рекурсивно - делать тысячи запросов очень неэффективно.
Правильнее изменить структуру таблицы. Гуглите "хранение дерева в БД"

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

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

Войти через центр авторизации
Похожие вопросы