フィールドID、NAME、URL、BRANDを持つproductsというテーブルがあります次に、フィールドID、PRODUCT_ID、TYPE、VALUEを持つproduct_filterというフィールドがあります
次の製品テーブルがあると仮定しましょう
1 | 製品 1 | 製品-1 | ブランド 1
2 | 製品 2 | 製品-2 | ブランド 2
3 | 製品 3 | 製品-3 | ブランド 1
および product_filter テーブル
1 | 1 | 材料 | ウール
2 | 1 | 材料 | コットン
3 | 2 | 材料 | コットン
4 | 3 | 材料 | ウール
5 | 1 | 季節 | 秋
5 | 2 | 季節 | 秋
5 | 1 | 季節 | 全て
などなど
顧客がウェブページにいて、フィルタリングしようとしているとき
素材:ウール、綿 季節:秋
私の結果は、製品1(素材と正しい季節の両方を持っています)と製品2(1つの素材と正しい季節を持っています)です。
私は結合でこれを試しました
SELECT DISTINCT(shop_product.product_number), `shop_product`.`color_count`, `shop_product`.`category_id`, `shop_product`.`in_stock`, `shop_product`.`url_image`, `shop_product_description`.* FROM (`shop_product`) JOIN `shop_product_description` ON `shop_product`.`id` = `shop_product_description`.`product_id` JOIN `shop_category_description` ON `shop_product`.`category_id` = `shop_category_description`.`category_id` INNER JOIN `shop_filters` ON `shop_product`.`id` = `shop_filters`.`product_id` WHERE `shop_product`.`status` = 1 AND `shop_product_description`.`language_id` = '1' AND `shop_category_description`.`language_id` = '1' AND ( (shop_filters.type = '1' AND shop_filters.keyword = 'cotton') OR (shop_filters.type = '1' AND shop_filters.keyword = 'wool') ) AND (shop_filters.type = '2' AND shop_filters.keyword = 'fall') ORDER BY shop_product`.`url_image` asc, `shop_product_description`.`name` desc LIMIT 36
Distinct を使用して 1 つの oer 製品を取得しました (製品 1 には両方の材料があるため)。
でも変えないと結果が出ない
( (shop_filters.type = '1' AND shop_filters.keyword = 'cotton') OR (shop_filters.type = '1' AND shop_filters.keyword = 'wool') ) AND (shop_filters.type = '2' AND shop_filters.keyword = 'fall')
に
( (shop_filters.type = '1' AND shop_filters.keyword = 'cotton') OR (shop_filters.type = '1' AND shop_filters.keyword = 'wool') ) OR (shop_filters.type = '2' AND shop_filters.keyword = 'fall')
ただし、私の結果は、コットンまたはウールまたは秋の製品です。誰か提案があれば、アイデアをお願いします...