Mysql поиск min в 2 столбцах разных таблиц

lara_

Новичок
Доброе утро.
Возникла задача поиска min значения, но не так все просто (во всяком случае для меня):
У товара есть две цены: сама цена и цена со скидкой (эти цены хранятся в разных таблицах). Если скидка у товара есть, то "реальной" ценой считается цена со скидкой. Если скидки нет - в таблицу записывается значение "-1" и оно просто игнорируется. Необходимо найти min значение цен товаров, т.е. поиск нужно осуществлять среди "реальных" цен (если сидка есть: "реальная" цена - цена со скидкой, если нет - сама цена).
После этого у пользователя есть возможность установить фильтр диапозона цен (min и max) и система должна отобрать товары, чьи "реальные"цены попадают в установленный диапозон.
Если у кого-то есть идеи, как разрешить такую задачу - буду рада помощи.
Спасибо.
 

lara_

Новичок
Какие варианты были?
Все до чего смогда додуматься
select MIN(Price) from tblArticles where CategoryID='$cat_id' and tblArticles.CatalogVisible='1'
select MIN(OldPrice) from tblOldPrice,tblArticles where CategoryID='$cat_id' and tblArticles.CatalogVisible='1' and tblArticles.Id = tblOldPrice.ArticleID and OldPrice!='-1'
т.е. ищу min в двух таблицах (поля Price и OldPrice), после этого min - минимальное из найденных значений.
Знаю - это "странное" решение, Но это все что могла придумать.
 

Gas

может по одной?
Ну почему странное, вполне очевидное решение.
Просто можно сделать и одним запросом.

к таблице tblArticles приджойнить left join'ом таблицу tblOldPrice, а в перечне полей можно указать условие IF, в котором сравнить поля из разных таблиц.

Схематично:
PHP:
SELECT IF(OldPice > 0 AND OldPrice < Price, OldPrice, Price) as PriceMin FROM tblArticles LEFT JOIN tblOldPrices ON ... WHERE ...
 

lara_

Новичок
Знаю, прошло уже много времени, НО эту задачу так и не смогла разрешить.
Запрос
PHP:
SELECT min(IF( OldPrice = -1, Price, OldPrice))  AS min FROM tblArticles, tblOldPrice WHERE CategoryID='{$cat_id}'  and tblArticles.Id = tblOldPrice.ArticleID GROUP BY  tblArticles.Id
выводит min значение.
Аналогично ищу max.
После этого у пользователя есть возможность установить фильтр диапозона цен (min и max) и система должна отобрать товары, чьи "реальные"цены попадают в установленный диапозон.
То, что сейчас использую
PHP:
select * from tblArticles,tblArticleInfo,tblOldPrice where  tblOldPrice.ArticleID=tblArticles.Id and tblArticleInfo.ArticleID=tblArticles.Id  AND tblArticles.CategoryID='{$cat_id}'  and (((Price>=$min) and (Price<=$max)) or((OldPrice>=$min) and (OldPrice<=$max)))
Условие составлено некорректно, т.к. если есть цена со скидкой - то это считается РЕАЛЬНОЙ ценой, если нет - реальная цена - это сама цена. И отбор данных необходимо осуществлять не по двум полям Price и OldPrice(как сейчас), а только по одному(или Price, или OldPrice).
Может есть какая-то конструкция, которая позволит использовать нужное поле? Что-то вроде (IF( OldPrice = -1, Price, OldPrice)) только для составления условия where.
 

lara_

Новичок
Код:
where IF( OldPrice = -1, Price, OldPrice)  between $minValue and $maxValue
Вашу запись увидела только сейчас. На др. форуме мне подсказали
PHP:
select * 
from tblArticles a
join tblOldPrice o on o.ArticleID=a.Id 
join tblArticleInfo i on i.ArticleID=a.Id
where a.CategoryID='{$cat_id}'  
  and if(o.OldPrice<0,a.Price,o.OldPrice) between $min and $max
Но смысл один.
Всем большое спасибо за помощь.
 
Сверху