2017-04-10 9 views
0

私は小さなカスタムカスタムeコマースサイトにさまざまな在庫アイテムを含むテーブルを扱っています。私のクライアントは、価格帯を含むいくつかのフィルタを要求しています。動的に生成されたフィールド値の値による選択

ユーザーのアカウントのさまざまな要因に基づいてユーザーに応じた価格設定が必要であることを除けば、簡単です。そのため、価格はクエリで計算されます。

理想的なSQLはこのようなものです:ORDERがするようSELECT計算は、正常に動作することを明らかに

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は、4つのユーザ依存の値です。) WHEREがテーブル内の他の値に対して表示されますが、この価格フィルタでの追加はその価格フィールド(total_price)として機能せず、その値はクエリで動的に生成されます。

WHERE欄に価格帯フィルタを追加する方法に関するヒントやヒントは、実際には可能でしょうか?

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

それが問題に接近する方法にいずれかが違う場合は、私はPHPおよびPDOで働いています。

お時間をいただきありがとうございます。

答えて

1

使用HAVING

HAVING句は、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 

このクエリを使用することができなかったため、SQLに追加されました。

+0

完璧、ありがとう!私は「HAVING」を読んでいることを確認します。とても有難い。 – Aaron

関連する問題