![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Имеются две таблицы, одна с товарами, вторая с категориями. Есть фильтры, которые применяются к товарам. Нужно сделать вывод:
%НАЗВАНИЕ КАТЕГОРИИ%
и под ним три товара из этой категории, отвечающие заданным критериям
То есть получается
Неактивен
Прочитайте до конца http://sqlinfo.ru/forum/viewtopic.php?id=1742
Неактивен
deadka, спасибо.
Неактивен
1. Одним запросом лучше не делать (см до конца http://sqlinfo.ru/forum/viewtopic.php?id=1742 )
2. Вы некорректно используете группировку, см FAQ №16
* в рабочих запросах писать тоже не стоит.
3. Сортировать категории нужно по средней цене:
-) всех товаров, входящих в категорию
-) только тех, которые удовлетворяют условиям на товары
-) только 3 отображаемых товаров?
4. Какие именно 3 товара из удовлетворяющих условию нужно выводить?
Неактивен
vasya
1. Хорошо, не буду;
2. Ok;
3. Всех товаров, правда с условием что товары.`deleted` = 0;
4. По `id` в порядке убывания.
Неактивен
SELECT c.`НАЗВАНИЕ КАТЕГОРИИ`, sum(t.price)/count(t.id) `средняя цена всех товаров категории с условием что deleted=0` FROM `товары` t JOIN `категории` c ON t.`cat_id` = c.`id` WHERE t.`deleted`=0 GROUP BY t.`cat_id` ORDER BY 2;
Далее в цикле для каждой категории, выбираете 3 товара.
Если товаров, удовлетворяющих условию нет, то категорию не выводите. (Если данная ситуация будет регулярно иметь место, то вначале нужен запрос, который определит нужные категории, а в предыдущий добавите ограничение на категории).
Неактивен
Кстати, если использовать STRAIGHT_JOIN то порядок сортировки из подзапроса сохраниться?
Неактивен
Спасибо! А AVG() для цены здесь работать не будет?
UPD: Oops, не заметил что выборка идёт из таблицы с товарами.
Отредактированно Борис06 (14.07.2013 23:06:13)
Неактивен
Борис06 написал:
Спасибо! А AVG() для цены здесь работать не будет?
Будет, я забыл про эту ф-ию
Неактивен