2016-05-10 5 views
0
SELECT COUNT(DISTINCT `product_id`) AS `total` 
FROM(
    SELECT DISTINCT `p`.`product_id` 
    FROM oc_category_path cp 
    LEFT JOIN oc_product_to_category p2c ON (cp.category_id = p2c.category_id) 
    LEFT JOIN oc_product_filter pf ON (p2c.product_id = pf.product_id) 
    LEFT JOIN oc_product p ON (pf.product_id = p.product_id) 
    LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) 
    LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) 
    INNER JOIN `oc_product_filter` AS `pf` ON `p2c`.`product_id` = `pf`.`product_id` 
    WHERE IF(`p`.`quantity` > 0, 7, `p`.`stock_status_id`) IN(7) 
     AND `p`.`date_available` <= NOW() 
     AND `p`.`status` = '1' 
     AND `cp`.`path_id` = '452' 
     AND `pf`.`filter_id` IN(241) 
     AND pd.language_id = '1' 
     AND p.status = '1' 
     AND p.date_available <= NOW() 
     AND p2s.store_id = '0' 
     AND cp.path_id = '452' 
     AND pf.filter_id IN (241) 
) AS `tmp` 
+0

Come on。あなたが書いたことを注意深く見てください。また、書かれているように、これらのすべてが内部結合としてレンダリングされることに注意してください。 – Strawberry

+0

これはopensource code opencartのもので、これは私が書いたものではない標準的なコードです。どのテーブルが重複しているかを見つける方法はありますか? – shobahari

+0

このような標準コードにはこのような目障りなエラーがあります。 INNER JOINを誰が作成しましたか? – Strawberry

答えて

1

このライン 'PF' というエラー...

LEFT JOIN oc_product_filter pf ON (p2c.product_id = pf.product_id) 

...株式表の別名をこの行で...

INNER JOIN `oc_product_filter` AS `pf` ON `p2c`.`product_id` = `pf`.`product_id` 

これは起こりません。したがって、別のエイリアスを2番目のエイリアスに付けてください。

SELECT COUNT(DISTINCT product_id) total 
FROM 
    (SELECT DISTINCT p.product_id 
       FROM oc_category_path cp 
       LEFT 
       JOIN oc_product_to_category p2c 
        ON p2c.category_id = cp.category_id 
       JOIN oc_product_filter pf 
        ON pf.product_id = p2c.product_id 
       JOIN oc_product p 
        ON p.product_id = pf.product_id 
       JOIN oc_product_description pd 
        ON pd.product_id = p.product_id 
       JOIN oc_product_to_store p2s 
        ON p2s.product_id = p.product_id 
       JOIN oc_product_filter pf2    -- <-- changed 
        ON pf.product_id = p2c.product_id 
       WHERE IF(p.quantity > 0, 7, p.stock_status_id) IN(7) 
        AND p.date_available <= NOW() 
        AND p.status = 1 
        AND cp.path_id = 452 
        AND pf.filter_id IN(241) 
        AND pd.language_id = 1 
        AND p.status = 1 
        AND p.date_available <= NOW() 
        AND p2s.store_id = 0 
        AND cp.path_id = 452 
        AND pf2.filter_id IN(241)    -- <-- changed 
    ) tmp; 
+0

洞察のおかげで、それは私が問題を理解するのを助けた.. – shobahari

関連する問題