d-stream: Все надо тестить. Бывает решение классное, переписал запрос, а по факту либо дольше либо так же. Не многие разбираются в глубинах MySQL, т.к. с современными серверами часто даже не лучший запрос летает и копать глубже необходимости нет. И мой запрос нормально работает на стандартном магазине с 5тыс товаров.
Функция, которая формирует запрос универсальная и при необходимости она в условия добавляет таблицу m и т.п, а Join рисует по умолчанию на любой вариант запроса. Аналогично с WHERE 1, чтобы при необходимости добавить AND .... По вложенным запросам понял, буду думать. Только совсем не понимаю как работает WHERE p2a.attribute_id IS NOT NULL AND EXISTS .... Там получаются 3 таблицы с единицами каждая и как они влияют на p2a.attribute_id для меня загадка.
Добавил структуру данных в вопрос prntscr.com/edxyjr Таблица oc_product_attribute - 21320 строк oc_product_attribute_id - 31250строк, т.к. в первой таблице в поле text значения могут быть задвоены, например ЛСП:ЛПП, а во второй это будет разбито на 2 строки в одной ЛСП в другой ЛПП.
css не трогать?