是什么导致双行,以及在受代码约束时如何修复

What is causing double rows, and how to fix when constrained by code

我 "tapping in" 一些 php 代码,试图遵守我的购物车的 "best practices" 不重写核心代码。所以我在插入代码的方式和位置上受到限制。这是正在执行的 SQL 的结果:

    SELECT SQL_CALC_FOUND_ROWS
    b.*, a.*
    FROM `product` a
    LEFT JOIN `product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1)
     INNER JOIN product_shop product_shop
ON (product_shop.id_product = a.id_product AND product_shop.id_shop = 1)  JOIN `category_lang` cl ON (cl.id_category = a.id_category_default) 
    WHERE 1  AND cl.name <> "Archives" AND a.id_product IN (
    SELECT p.id_product
    FROM `product` p
     LEFT 
    JOIN stock_available stock
    ON (stock.id_product = p.id_product AND stock.id_shop = 1  AND stock.id_shop_group = 0  )
    WHERE p.id_product NOT IN (
        SELECT DISTINCT(id_product)
        FROM `product_attribute`
    )
    AND IFNULL(stock.quantity, 0) <= 0
)
    ORDER BY a.`id_product` DESC LIMIT 0,50

里面我负责的代码是:

JOIN `category_lang` cl ON (cl.id_category = a.id_category_default)

 AND cl.name <> "Archives"

我对插入的位置没有发言权。

我实际上得到了我正在寻找的结果......只有两次。每条记录一式两份返回。

我们找到的解决方案是 GROUP BY "duplicates" 的列,这是由您的联接引起的。

GROUP BY a.id_product
ORDER BY a.`id_product` DESC LIMIT 0,50