SELECT by动态生成的字段值

时间:2017-04-10 15:08:38

标签: mysql pdo

我正在使用一张表格,其中包含一个小型定制电子商务网站上的各种库存商品。我的客户要求提供多种过滤器,包括价格范围。

除了根据用户帐户中的各种因素,还需要依赖于用户的定价,因此很容易,因此价格会在查询中计算出来。

理想的SQL是这样的:

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

1.1*0.801.5*0.80是四个与用户相关的值。)

显然SELECT计算工作正常,ORDERWHERE表格中的其他值也是如此:但现在添加此价格过滤器不起作用该价格字段(total_price)及其值在查询中动态生成。

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

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

如果它与如何处理问题有任何不同,我正在使用PHP和PDO。

感谢您的时间。

1 个答案:

答案 0 :(得分: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

此查询应该可以胜任。