2017-04-10 63 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

相關問題