Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Выбрать строки с минимальными значениями


Автор: taral 24.3.2009, 17:56
Кажется у меня не вышло нормально описать что мне нужно в названии темы.
Задача такова. Есть таблица.
id     title         cost     catalog_id
1     слово1     20          1
2     слово2     31          1
3     слово3     40          1
4     слово4     41          2
5     слово5     10          2
Примерно такое.
Мне нужно одним запросом получить для каждого каталога товар с наименьшей ценой.
В данном случае результат должен быть такого вида.
catalog_id     id       title        мин.цена
   1                 1      слово1        20
   2                 5      с лово5       10
Как вытащить минимальные цены я понимаю, но как вытащить строки с ними не выходит.
Код

SELECT wares.*, MIN(cost) as min FROM `codes`  GROUP BY ware_id

Таким образом я получаю первую попавшуюся строку в группировке. а в min минимальное значение. Но это не то что нужно.
Подскажите кто знает.

Добавлено через 6 минут и 26 секунд
Пробывал так. Но проблема в том что в условии HAVING значение cost уже цена первого попавшегося продукта =( Не знаю как быть.
Код

SELECT codes.*, MIN(cost) as min FROM `codes`  GROUP BY ware_id HAVING min IN (cost)

Автор: Akina 24.3.2009, 18:04
Код

select t1.*
from wares as  t1
inner join 
(
select min(cost) as cost, catalog_id
from wares as t2
group by catalog_id
) as t2
on t1.cost=t2.cost
and t1.catalog_id=t2.catalog_id

Если же для одного catalog_id есть несколько записей с одинаковым минимальным cost и разными id - вернутся они все.

Автор: taral 24.3.2009, 18:09
Так работает. Но Тут есть вложенный запрос. Может можно как то без него.
Код

SELECT * FROM wares as w, (SELECT MIN(cost) as min, catalog_id FROM `wares` GROUP BY catalog_id) as b WHERE c.catalog_id  = b.catalog_id AND c.cost = b.min


Добавлено @ 18:11
Akina  спасибо. Когда вы ответили я видно писал что у меня вышло=)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)