gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Как можно оптимизировать следующий SQL запрос — вывод элемента по ближайшему родителю?

Запрос работает верно, но представляет собой "запрос в запросе", что не оч хорошо.

SELECT
 t1.*
FROM (
 SELECT
   t1.`id` `user_id`
   , t1.`parent_id` `owner_id`
   , t1.`level`
   , t2.`product_id`
   , t2.`url`
 FROM
   `user_tree` t1
 INNER JOIN
   `product` t2 ON t2.`user_id` = t1.`parent_id`
 WHERE
   t1.`id` = 33 # (USER_ID HERE)
 ORDER BY
   t1.`level`
) t1
GROUP BY
 t1.`product_id`
ORDER BY
 t1.`product_id`


Таблицы выглядят так
user_tree
id -- parent_id -- level

product
id -- product_id -- user_id -- url

Какое поведение нужно:
Есть юзеры, они могут приглашать друг друга - то есть дерево юзеров
Есть продукты, они принадлежат юзерам
Нужно для юзера любого уровня вложенности выбрать продукты принадлежащие ему, а если нету, то его родителю, а если нету - то его родителю и тд, но общее количество продуктов должно быть не больше чем количество уникальных product_id, таким образом "получить продукты для ближайшего родителя".
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

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