Вход | Регистрация


MySQL выборка самого подходящего товара

MySQL выборка самого подходящего товара
Я
   Septera
 
14.05.18 - 10:16
Доброго времени суток!
Есть таблица для временного хранения списка товаров:
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
 
 
   Базис
 
1 - 14.05.18 - 10:37
Мы не против, делай!
   Septera
 
2 - 14.05.18 - 11:17
(1) Ты во мне сомневался?!
Решил задачу таким образом, но оптимальность под вопросом:
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);
   trdm
 
3 - 14.05.18 - 11:25
А зачем все эти лишние обрамления апострофами?
На мой взгляд - это мусор, который не особо и нужен...
   trdm
 
4 - 14.05.18 - 11:26
А работать с таким запросом кодеру - один сплошной гемор.
   b_ru
 
5 - 14.05.18 - 11:28
(3) Такие названия полей как srok_ot и products_vlozh хоть апострофами обмажь, хоть дерьмом - разницы не будет

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует