SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.07.2012 23:08:00

Svap
Участник
Зарегистрирован: 08.07.2012
Сообщений: 4

Минимальная цена для позиций из списка

Здравствуйте
Имеется таблица автозапчастей,
|kod|name|kolich|price|curency|post_id|
в которой прописаны артикулы запчастей, цены, валюты и поставщики.
Необходимо получить строки по одному конкретному поставщику, цена которых наименьшая среди предложений остальных поставщиков.
Цены хранятся в трех валютах - гривна(1), доллар(2), евро(3).
Пока все делаю вручную, продублировав исходную таблицу и в ней последовательно выполняю запросы.
Как сделать все одним запросом?
Спасибо.

Неактивен

 

#2 09.07.2012 03:37:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Минимальная цена для позиций из списка

curency - это валюьа? а откуда берется курс?

Лучше всего хранить цену в единой валюте, тогда получится очень простой запрос. В MariaDB есть для этой цели виртуальные колонки http://kb.askmonty.org/en/virtual-columns/

В текущей реализации придется делать вложенную конструкцию из if(), которая будет приводить цену к единой валюте.

Неактивен

 

#3 09.07.2012 12:26:27

Svap
Участник
Зарегистрирован: 08.07.2012
Сообщений: 4

Re: Минимальная цена для позиций из списка

vasya написал:

получится очень простой запрос

Скопировал в отдельную таблицу, где привел к единой валюте.
Просьба привести упомянутый Вами простой запрос.

Неактивен

 

#4 09.07.2012 12:36:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Минимальная цена для позиций из списка

select post_id from tablename where name='..' group by post_id order by `цена в единой валюте` desc limit 1;

Неактивен

 

#5 10.07.2012 01:19:02

Svap
Участник
Зарегистрирован: 08.07.2012
Сообщений: 4

Re: Минимальная цена для позиций из списка

vasya, спасибо за помощь, но это не совсем тот результат, который мне нужен.

Возможно я не достаточно подробно сформулировал мою проблему, пробую еще раз:
Есть таблица товаров `prices` id|kod|name|kolich|price|curency|post_id|,
в которую загружены прайсы нескольких поставщиков,
где 'kod' - код запчасти (товара), может встречаться одинаковый у разных поставщиков 'post_id' с разной ценой 'price'.
Необходимо для одного конкретного поставщика 'post_id' выбрать строки его прайса, у которых цена запчасти по сравнению с такими же кодами запчастей по остальным поставщикам наименьшая.
Прошу простить за предыдущую неполную постановку задачи.
Спасибо за помощь

Неактивен

 

#6 10.07.2012 13:05:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Минимальная цена для позиций из списка

Svap написал:

Необходимо для одного конкретного поставщика 'post_id' выбрать строки его прайса, у которых цена запчасти по сравнению с такими же кодами запчастей по остальным поставщикам наименьшая.

Попадет ли в конечную выборку результат если для конкретной детали 'kod' нашего поставщика 'post_id':
а) нет совпадения у других поставщиков?
б) одинаковая минимальная цена у нескольких поставщиков?

Неактивен

 

#7 10.07.2012 14:14:32

Svap
Участник
Зарегистрирован: 08.07.2012
Сообщений: 4

Re: Минимальная цена для позиций из списка

пункты а, б -> Да
Насчет случая, когда нет совпадения у других поставщиков, было бы неплохо подсчитывать количество деталей с одинаковым 'kod'.
Но это уже украшательства...

Неактивен

 

#8 10.07.2012 16:24:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Минимальная цена для позиций из списка

Лучше сделать в несколько запросов. Сначала
select kod from tablename where post_id='конкретный поставщик'
затем в цикле
select min(price) from tablename where kod='значение из первого запроса';
select .. from tablename where kod='значение из первого запроса' and price='минимальная цена из предыдущего запроса' and post_id='конкретный поставщик';

Если хотите запихнуть все в один запрос смотрите http://sqlinfo.ru/forum/viewtopic.php?id=1742 (читать до конца)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson