Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Выбрать товар с наименьшей ценой

Сообщения:  [1-7] 

 
 автор: TetRiska   (08.04.2011 в 01:28)   письмо автору
 
   для: cheops   (07.04.2011 в 11:28)
 

да именно em_produce_id

  Ответить  
 
 автор: cheops   (07.04.2011 в 11:28)   письмо автору
 
   для: TetRiska   (07.04.2011 в 10:46)
 

Это вот это поле?
IF(MIN(`em_produce_price_us`), em_produce_id, em_produce_id)) id

  Ответить  
 
 автор: TetRiska   (07.04.2011 в 10:46)   письмо автору
 
   для: 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'

Вот ИД прайс-позиции неверно берет, ИД представлено первой добавленной прайс-позиции, хотя сумму и валюту верно определяет...Поможете разобраться? Спасибо.

  Ответить  
 
 автор: cheops   (06.04.2011 в 19:59)   письмо автору
 
   для: 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'
Если их нет, то попытаться выбрать доллары, если нет их попытаться выбрать евро? В этом случае мы практически ничего не теряем, запросы простые и хорошо индексируются, вероятность второго и третьего запроса существенно уменьшены из-за наличия цен в гривнах. Можно, конечно, попытаться один большой запрос составить, но скорее всего не обойтись без вложенных запросов, которые будут перелопачивать всю таблицу.

  Ответить  
 
 автор: TetRiska   (06.04.2011 в 16:30)   письмо автору
 
   для: 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

  Ответить  
 
 автор: cheops   (06.04.2011 в 16:27)   письмо автору
 
   для: TetRiska   (06.04.2011 в 16:21)
 

Пустые или все-таки нули (которые исключаются в WHERE-условии)? Если нули, вероятно придется ставить условия внутри MIN(), например, используя IF() или CASE.

  Ответить  
 
 автор: TetRiska   (06.04.2011 в 16:21)   письмо автору
 
 

Всем привет. Есть визитные группы и прайс-позиции. Прайс-позиции подчинены визитным группам, т.е. в 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'

  Ответить  

Сообщения:  [1-7] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования