Да в том-то и дело, что нет такого "тру решения". Даже в той же статье, из которой вы выбрали самый неудачный вариант, приведено ЧЕТЫРЕ варианта работы с деревьями.
Высоколобые интеллектуалы считают, что тру вариант - это вложенные множества.
Люди попроще используют материализованный путь. Из него по разделителю вырезается корневая категория телефонов, и дальше одним запросом с LIKE выбираются все дети.
В вашем же случае самый тупой вариант - это два цикла в приложении, которое работает с БД:
Сначала циклом пройти от телефонов верх, получая родителя, пока он не вернет пустоту. это будет корневая категория
А потом в цикле пройти вниз, получая всех детей, и добавляя их в WHERE IN, пока запрос не вернет то же количество записей, что и предыдущий - то есть, мы дошли до дна. И подставить полученный список в таблицу товаров.
Как вариант, приложение на старте кэширует все дерево категорий в массив, и дальше использует его для всех задач.
А если вам нужен прямо CTE запрос, то во-первых, ставьте нормальные теги, во-вторых, приведите
нормальные дампы таблиц (а не вот это на пальцах "ну есть телефончики..."), и тегайте
Akina и
Slava Rozhnev