Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток!
Есть таблица для временного хранения списка товаров:
CREATE TABLE `products` (
`item_number` varchar(15) NOT NULL,
`article` varchar(101) NOT NULL,
`price` float NOT NULL,
`srok_ot` smallint(6) NOT NULL,
`nal` mediumint(9) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
ALTER TABLE `products`
ADD PRIMARY KEY (`item_number`);
Необходимо для каждого `article` найти товар с самым маленьким сроком доставки при этом наименьшей ценой и наибольшим наличием, то есть аналог ORDER BY `srok_ot` ASC, `price` ASC, `nal` DESC
Пример таблицы:
item_number|article|price|srok_ot|nal
1|C110|1000|1|20
2|C110|500|2|30
3|C110|1500|1|50
4|C110|1000|1|20
Выбрать надо 1|C110|1000|1|20 или 4|C110|1000|1|20
Неактивен
Решил задачу таким образом, но оптимальность под вопросом:
ALTER TABLE `products`
ADD KEY `index1` (`article`);
SELECT
`products_main`.`item_number`,
`products_main`.`article`,
`products_main`.`price`,
`products_main`.`srok_ot`,
`products_main`.`nal`
FROM
`products` AS `products_main`
WHERE
`products_main`.`item_number` = (SELECT
`products_vlozh`.`item_number`
FROM
`products` AS `products_vlozh`
WHERE
`products_vlozh`.`article` = `products_main`.`article`
ORDER BY
`products_vlozh`.`srok_ot` ASC,
`products_vlozh`.`price` ASC,
`products_vlozh`.`nal` DESC
LIMIT 1);
Неактивен