MySQL5.0.88で製品検索を正しく機能させようとしています。
基本設定:製品を含むテーブルAがあります
A.id
A.ean
A.styleNo
A.price
A.seller (ID e.g. 123, 456)
そして価格表のある表B
B.name
B.ean
B.alt_price
B.seller
売り手は、検索を行うユーザーに一致するオプションの価格表を定義できます。私の検索は多かれ少なかれ次のようになります:
SELECT A.styleNo, A.price, B.price
FROM arts A
LEFT JOIN pricelists B ON
B.seller = A.seller
AND B.ean = A.ean
AND B.alt_price != 0
WHERE...
// pricelists
AND ( B.name = "some_name" AND B.seller = "123" ) OR ( next applicable seller ) ...
したがって、LEFT JOINの後に、価格表のすべてのアイテムを名前と販売者別に含めます。
これは、通常価格(A)とalt_price(B)の両方を選択し、結果を表示するときに既存のalt_priceをチェックして、ユーザーに正しい価格を表示できるため、問題なく機能します。
ただし、売り手がすべての商品に代替価格を指定していない場合、実際には価格表がないこの売り手の商品を表示したくないのに、Aの価格で商品を表示しています。エントリー(地域の品揃えを考えてください)。
したがって、ユーザーXに価格表「abc」があり、売り手123に500個の製品があり、そのうち200個が価格表「abc」にある場合、正しい価格で500個の200個ではなく、200個の製品のみを表示します。
LEFT JOINでB.alt_price!= 0を使用しようとしましたが、そこにあるすべてのアイテムに価格があるため、これは役に立ちません。
質問
実際の検索でこれを行う方法はありますか、それとも結果ループで行う必要がありますか。これはあまり熱心ではありません。