И правда, предложенный мной запрос не умеет считать в подкатегориях. Не подумал, что вложенность категорий может быть многоуровневая.
Спасибо за интересную задачку
Боюсь, что пытаться все решить одним единственным запросом - это не оптимальное решение. Так как оно проиграет по скорости и гибкости решению смеси циклов php и простых запросов к БД.
Как достаточно быстрый вариант (потому что селекты простые и выборки точные), можно написать хранимую процедурку в mysql, в которой бы с помощью банального курсора для каждой категории\подкатегории находились бы последние n-товаров. Результат бы записывался в отдельную табличку в базе (а вот тут может быть медленно, т.к. инсерты работают ощутимо медленнее селектов; ну да инсертов будет не много - столько же, сколько категорий). А уж потом, однострочным селектом можно было бы запрашивать результат.
Ну и что бы не быть голословным.
Вот 100% рабочий пример процедуры, которую надо создать в базе.
ну а тут нам остается только вызвать процедуру и заселектить результат.
CALL prod_counter;
SELECT * FROM tmp_prod_2_cat ORDER BY 1, 3, 2 DESC;
Уважаемые @Wild и @SooR
Возьметесь проверить? У меня... гм... стыдно сказать... база маленькая ))) все слишком быстро считается.
Ясное дело, что предлагаемое решение не в своем конечном варианте и требует доработки. В тех же подкатегориях не считаются товары (исправимо, просто поленился). Ну и может быть кто придумает, как можно избежать множественных инсертов в результирующую табличку