2012-01-06 9 views
0

私は製品価格を取得しようとしていますが、私は2つのテーブルに持っています(異なる価格管理があるため)。 ))2つのテーブルから価格を取得

1価格表(order by priority DESCで最初のチェック:私はそれが何をしたいのか

Product table: 
- SKU 
- msrp 
- price 
- disponible 

Price table: 
- SKU 
- price 
- disponible_from 
- disponible_to 
- period_from 
- period_to 
- priority 

:ここに私のスキーマです。例えば。 period_fromが大きく、period_fromが現在の日付より小さいかどうかを確認してください。また、そのSKUの製品の割引率がdisponible_fromdisponible_to

などのより大きいか小さいかどうかを確認してください。 disponible = 100の商品があり、価格がdisponible_from is 200の場合、価格表から価格を取得するのではなく、商品表から取得する必要があります。 disponible_fromが50、製品ディスポーザブル100の場合、価格表から価格を取得する必要があります。

2)価格表に一致がない場合は、製品表から価格を取得する必要があります。製品表の価格が満たされていない場合は、msrpを返す必要があります。

答えて

0
select ifnull(price.price, ifnull(product.price, product.msrp)) 
from price 
join product on price.sku = product.sku 
    and (product.disponible > ifnull(price.disponible_from, "1970-01-01") 
     and product.disponible < ifnull(price.disponible_to, curdate())) 
where (price.periodfrom < curdate() and price.periodto > curdate()); 
+0

ありがとうございます。私のエントリーは混乱でした。 – ethrbunny

+0

コード内で 'on'の近くにエラーが表示されます。また、これはピリオドとピリオドが満たされることを期待していますが、空にすることもできます。時には彼らは満たされ、時には空である。それを修正できますか? – Elias

+0

が編集されました。 periodfrom /が空の場合 - デフォルトは何ですか? – ethrbunny