|
|
|
| Всем привет. Есть визитные группы и прайс-позиции. Прайс-позиции подчинены визитным группам, т.е. в 1 визитке может быть множество прайс-позиции. В каждой прайс-позиции есть 3 типа цен - укр, дол, евр. Так вот мне нужно для визитной группы выбрать ту прайс позицию у которой наименьшая цена и вывести цену, цену выводить по приоритету - укр (если есть), дол (если есть), евр (если есть). Вывести нужно всего-лишь 1 цену. Вот писал запрос, но он мне выдает пустые значения по ценам, не пойму почему так. Прошу помощи. Заранее благодарен.
SELECT MIN(`em_produce_price_ua`) as price_ua,
MIN(`em_produce_price_us`) as price_us,
MIN(`em_produce_price_eu`) as price_eu
FROM `em_produce`
WHERE `em_business_group_id` = 19099
AND (`em_produce_price_ua` != 0
OR `em_produce_price_us` != 0
OR `em_produce_price_eu` != 0)
AND `em_produce_access` = 'y'
AND `em_produce_deleted` = 'n'
|
| |
|
|
|
|
|
|
|
для: TetRiska
(06.04.2011 в 16:21)
| | Пустые или все-таки нули (которые исключаются в WHERE-условии)? Если нули, вероятно придется ставить условия внутри MIN(), например, используя IF() или CASE. | |
|
|
|
|
|
|
|
для: cheops
(06.04.2011 в 16:27)
| | по умолчанию стоят нули. будьте добры, помогите написать запрос
При таком раскладе:
SELECT `em_produce_price_ua` as price_ua,
`em_produce_price_us` as price_us,
`em_produce_price_eu` as price_eu
FROM `em_produce`
WHERE `em_business_group_id` = 19099
AND `em_produce_access` = 'y'
AND `em_produce_deleted` = 'n'
|
Получил такое:
price_ua 10000 0 100
price_us 0 60 0
price_eu 0 0 0 | |
|
|
|
|
|
|
|
для: TetRiska
(06.04.2011 в 16:30)
| | А насколько критично все это делать одним запросом? Может сначала выбрать гривны
SELECT MIN(em_produce_price_ua) FROM em_produce
WHERE `em_business_group_id` = 19099
AND `em_produce_price_ua` != 0
AND `em_produce_access` = 'y'
AND `em_produce_deleted` = 'n'
| Если их нет, то попытаться выбрать доллары, если нет их попытаться выбрать евро? В этом случае мы практически ничего не теряем, запросы простые и хорошо индексируются, вероятность второго и третьего запроса существенно уменьшены из-за наличия цен в гривнах. Можно, конечно, попытаться один большой запрос составить, но скорее всего не обойтись без вложенных запросов, которые будут перелопачивать всю таблицу. | |
|
|
|
|
|
|
|
для: cheops
(06.04.2011 в 19:59)
| | Уже разобрал, из-за некорректного типа полей не выходило сделать 1 запрос. Пришлось на время навесить представление, которое не затрагивало тип полей основной таблицы.
select
if(`em_produce`.`em_produce_id`,`em_produce`.`em_produce_id`,NULL) AS `em_produce_id`,
if(`em_produce`.`em_business_group_id`,`em_produce`.`em_business_group_id`,NULL) AS `em_business_group_id`,
if(`em_produce`.`em_produce_price_ua`,`em_produce`.`em_produce_price_ua`,NULL) AS `em_produce_price_ua`,
if(`em_produce`.`em_produce_price_us`,`em_produce`.`em_produce_price_us`,NULL) AS `em_produce_price_us`,
if(`em_produce`.`em_produce_price_eu`,`em_produce`.`em_produce_price_eu`,NULL) AS `em_produce_price_eu`,
if(`em_produce`.`em_produce_access`,`em_produce`.`em_produce_access`,NULL) AS `em_produce_access`,
if(`em_produce`.`em_produce_deleted`,`em_produce`.`em_produce_deleted`,NULL) AS `em_produce_deleted`
from
`em_produce`
|
Применил такой запрос, стало все на места
SELECT IF(MIN(`em_produce_price_ua`), MIN(`em_produce_price_ua`),
IF(MIN(`em_produce_price_us`), MIN(`em_produce_price_us`), MIN(`em_produce_price_eu`))) min_price,
IF(MIN(`em_produce_price_ua`), 'uah', IF(MIN(`em_produce_price_us`), 'usd', 'eur')) cash,
IF(MIN(`em_produce_price_ua`), em_produce_id, IF(MIN(`em_produce_price_us`), em_produce_id, em_produce_id)) id
FROM `view_produce`
WHERE `em_business_group_id` = 19099
AND `em_produce_access` = 'y'
AND `em_produce_deleted` = 'n'
|
Вот ИД прайс-позиции неверно берет, ИД представлено первой добавленной прайс-позиции, хотя сумму и валюту верно определяет...Поможете разобраться? Спасибо. | |
|
|
|
|
|
|
|
для: TetRiska
(07.04.2011 в 10:46)
| | Это вот это поле?
IF(MIN(`em_produce_price_us`), em_produce_id, em_produce_id)) id
|
| |
|
|
|
|
|
|
|
для: cheops
(07.04.2011 в 11:28)
| | да именно em_produce_id | |
|
|
|