Страница 1 из 1

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

Добавлено: 2010-02-06 17:19:53
goshanecr
Привет товарищи! Прошу помощи в составлении запроса. Вроде всё просто, но чего-то не фурычит. 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
В итоге группировка работает а сортировка нет. Что не так?

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

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

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

Добавлено: 2010-02-06 19:04:04
goshanecr
Понятно. Спасибо!
Реализовал так:

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

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