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