Осилил...
SELECT t1.* FROM shop_productgroups t1 JOIN shop_productgroups t2
ON position(concat('0',t2.group_id) in t1.treeorder) > 0
AND t2.groupname='Процессоры' AND t1.groupname <>'Процессоры'
Объяснять в каком случае это не сработает не буду, как и аргументировать, при каких условиях/ограничениях подобное решение будет работать. Потому что для понимания объяснения нужно признать теорию...
Так это забота DBA - проставить индексы, настроить оптимальные параметры сервера, задать, если нужно, план запроса
Могу объяснить почему указанное решение в приведенном виде нельзя оптимизировать ни индексом, ни планом запроса, ни выдачей памяти оптимизатору для сортировки (это намёк на "оптимальные параметры сервера"). В имеющейся формулировке в тех "случайных" случаях, когда запрос будет работать "
правильноожидаемо" , максимум можно выжать из производительности - это одно сканирование индекса по диапазону и одно полное сканирование таблицы. В худшем случае - два полных сканирования таблицы и дисковая сортировка.
Но, если применить теорию, то можно достичь ситуации, когда потребуется только одно индексное сканирование по диапазону и одного взгляда на запрос будет достаточно, что бы понять, какую цель он (запрос) преследует... но это ведь не нужно, так как запрос работает "наугад" и никто не сможет доказать (и принят доказательства) что он (запрос) должен и будет правильно работать.
По теме темы - выкиньте из головы определение функции и доказательство реализуемости (вычислимости) алгоритма. А потом решите задачу из, как тут называют, "практического программирования".
p.s. По поводу полезности теоретических знаний. Случилось мне недавно озадачиться производительностью сервера форума, на котором от 2-5К пользователей онлайн, LA 10-30++ и тормоза. Решение от "практиков" - нужно купить мощный кластер, мигрировать форум и будет "все хорошо". На вопрос "почему?" практики не ответили, сославшись на то, что "хозяин и админ форума - *****и, а много хорошего, мощного и дорогого железа еще никому не мешало, и нужно вообще менять движок форума и "всё переписывать", они же практики...".
А вот решение от "теоретиков" - два десятка строк кода (в штатном механизме настроек сервера форума), два десятка строк конфигов и один "маленький" дополнительный сервер (с мощностью в 1/4 от основного сервера и "быстрыми" винтами для решения текущих проблем с недостатком свободного дискового пространства).
Проверили решение от "теоретиков", оно даже на начальном этапе внедрения оказалось действенным - уровень LA ~ 2 при 2К пользователей онлайн, скорость загрузки страниц форума уменьшилась. При более высокой загрузке сервера страницы будут отдаваться примерно в 10 раз быстрее чем в оригинальной постановке (и ожидается, что будут отдаваться, а не обрывать соединение). Решение от "теоретиков" в сравнении с предложениями от "практиков" оказалось на ~75% дешевле по серверным мощностям, на 90% дешевле по программной составляющей и на 100-% совместимо с существующим ПО (не нужно менять движок форума и переписывать все его оригинальные и не очень оригинальные "плюшки"). А уважаемые "практики" были готовы гарантировать результат от их "решения" только на словах.