Помогите с группировкой и сортировкой результатов

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
goshanecr
сержант
Сообщения: 252
Зарегистрирован: 2008-03-31 15:54:49
Откуда: Пермь, Екатеринбург
Контактная информация:

Помогите с группировкой и сортировкой результатов

Непрочитанное сообщение goshanecr » 2010-02-06 17:19:53

Привет товарищи! Прошу помощи в составлении запроса. Вроде всё просто, но чего-то не фурычит. MySQL 5.1.42 i386 OS FreeBSD 8.0
Таблицы (описания внешних ключей и возможно типов некорректные но думаю понятные, писал просто от руки потому прошу на этот момент не рычать, объединения тоже используются. Тут написано просто без них:) )
zakaz - в ней хранятся заказы с их названиями

Код: Выделить всё

id  auto_increment primary key int unsigned,
zakazTitle char(30)
stateTypes - типы возможных состояний заказа (принят, в процессе, исполнен и т.д.)

Код: Выделить всё

id  auto_increment primary key int unsigned,
stateTitle char(20)
zakazState - сюда заносятся данные об изменении состояния заказа и время этого изменения.

Код: Выделить всё

id  auto_increment primary key int unsigned,
zakazID int unsigned foreign key (zakaz.id),
stateID int unsigned foreign key (stateTypes.id),
stateDate int unsigned
Так вот хочу вывести список заказов с их последними состояниями. Т.е. группирую по zakaz.id и сортирую по убыванию zakazState.stateDate.

Код: Выделить всё

SELECT zakaz.id,
    zakaz.zakazTitle,
    stateTypes.stateTitle,
    zakazState.stateDate
FROM zakaz, zakazState, stateTypes
WHERE zakaz.id = zakazState.zakazID
    AND zakazState.stateID = stateTypes.id
GROUP BY zakaz.id
ORDER BY zakazState.stateDate DESC
LIMIT 0 , 10
В итоге группировка работает а сортировка нет. Что не так?
Люблю в инете шарить. И браузер мой только Opera !!!
Пользователям стараюсь ставить дистр Ubuntu. Уже 3 человека пересели.
Домашний комп FreeBSD 9.0 amd64
FreeBSD - изменим жизнь к лучшему!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Помогите с группировкой и сортировкой результатов

Непрочитанное сообщение zg » 2010-02-06 18:56:16

goshanecr писал(а):GROUP BY zakaz.id
ORDER BY zakazState.stateDate DESC
сортировка всегда работает с конечным набором строк, а не промежуточным
goshanecr писал(а):Так вот хочу вывести список заказов с их последними состояниями.
либо временная таблица, либо веременная таблица через подзапрос

Аватара пользователя
goshanecr
сержант
Сообщения: 252
Зарегистрирован: 2008-03-31 15:54:49
Откуда: Пермь, Екатеринбург
Контактная информация:

Re: Помогите с группировкой и сортировкой результатов

Непрочитанное сообщение goshanecr » 2010-02-06 19:04:04

Понятно. Спасибо!
Реализовал так:

Код: Выделить всё

SELECT zakaz.id,
    zakaz.zakazTitle,
    stateTypes.stateTitle,
    zState.stateDate
FROM zakaz, 
   (SELECT * FROM zakazState
     ORDER BY stateDate DESC) AS zState, stateTypes
WHERE zakaz.id = zState.zakazID
    AND zState.stateID = stateTypes.id
GROUP BY zakaz.id
LIMIT 0 , 10
Люблю в инете шарить. И браузер мой только Opera !!!
Пользователям стараюсь ставить дистр Ubuntu. Уже 3 человека пересели.
Домашний комп FreeBSD 9.0 amd64
FreeBSD - изменим жизнь к лучшему!