Сортировка по подчиненной таблице. Помогите написать запрос.

air

Новичок
Сортировка по подчиненной таблице. Помогите написать запрос.

Коллеги помогите написать корректный запрос.

Ситуация следующая, есть две таблицы, условно, главная таблица DEVICE и таблица с параметрами DEVICE_PARAMS. Отношение DEVICE 1:N DEVICE_PARAMS.
Цель отсортировать записи в таблице DEVICE по какому либо из параметров таблицы Device_params.

DEVICE состоит из device_id, device_name.
DEVICE_PARAMS из device_id, device_param_id, device_param_name, device_param_value.

Выборка всех устройств и параметрами выглядит так.
Select * from DEVICE a, DEVICE_PARAMS b where a.device_id = b.device_id order by device_id;

Как отсортировать записи в DEVICE по значению поля DEVICE_PARAMS.device_param_value для параметра device_param_name, т.е. отобрать устройства с максимальным значением определенного параметра? Что самое сложное для меня, чтобы в результирующем запросе осталось сортировка по device_id, иначе параметры перемешаются в кучу :)


Перепробовал массу вариантов, но все их тут писать на буду т.к. это все они ни на шаг не приблизили меня к цели. У меня цель сделать это одним запросом к базе. На худой конец можно конечно сделать двумя запросами (уже в коде php), но это получится по запросу на каждую запись, что скажется на производительности и придется прикручвать кеширование. Может есть вариант обойтись малой кровью?
 

chira

Новичок
какая версия MySQL?

для версии >= 4.1
Код:
SELECT d.*
FROM device d
 ,device_params dp
 ,(SELECT device_param_id, MAX(device_param_value) AS device_param_value
 FROM device_params
 WHERE device_param_name = ' aa'
 GROUP BY device_param_id
) dg
WHERE d.device_id = dp.device_id
 AND dp.device_param_id = dg.device_param_id
 AND dp.device_param_value = dg.device_param_value
возможно это поможет:
MySQL
 

air

Новичок
Версия 4.1.21,
спасибо, похоже это то что надо, буду разбираться...
 
Сверху