2017-04-10 61 views
0

我正在使用包含各种小型定制电子商务网站上的库存项目的表格。我的客户请求了一些过滤器,包括价格范围。按动态生成的字段值的值进行选择

除了根据用户帐户中的各种因素还需要依赖于用户的定价之外,它们足够简单,因此价格在查询中计算。

理想的SQL是这样的:(1.1*0.801.5*0.80是四个依赖于用户的值)

SELECT 
    SQL_CALC_FOUND_ROWS s.*, 
    IF(s.value_a <= 0.5, s.price*1.1*0.80, s.price*1.5*0.80) AS total_price 
FROM stock s 
WHERE 
    (total_price >= :minimum_price_filter AND total_price <= :maximum_price_filter) 
    AND (s.value_b='X' OR s.value_b='Y') 
ORDER BY total_price ASC, s.value_a, s.value_b LIMIT 0,25 

显然,这SELECT计算工作正常,一样的ORDER,和WHERE表中的其他值:但现在在此价格过滤器中添加不起该价格字段(total_price)的作用,并且其值在查询中动态生成。

有关如何将价格范围过滤器添加到WHERE子句中的任何提示或提示可能实际上是可能的?

WHERE (total_price >= :minimum_price_filter AND total_price <= :maximum_price_filter)

如果它使任何不同的问题是如何接近,我在PHP和PDO我工作。

谢谢你的时间。

回答

1

使用HAVING:加入

HAVING子句SQL,因为WHERE关键字无法与合计函数

SELECT 
    SQL_CALC_FOUND_ROWS s.*, 
    IF(s.value_a <= 0.5, s.price*1.1*0.80, s.price*1.5*0.80) AS total_price 
FROM 
    stock s 
WHERE 
    s.value_b='X' 
    OR s.value_b='Y' 
HAVING 
    total_price <= :maximum_price_filter 
    AND total_price >= :minimum_price_filter 
ORDER BY 
    total_price ASC, 
    s.value_a, s.value_b 
LIMIT 
    0,25 

该查询使用应该做的工作。

+0

完美,谢谢!我会确保我阅读'HAVING'。非常感激。 – Aaron

相关问题