首页 > 解决方案 > 如何在右表中的特定行上进行左连接?

问题描述

我的网站可能有用户的个人价格表。当我在所有产品表上离开连接导入的产品表时,我不知道该放在哪里WHERE只会在右表的特定行(记录的用户行)上进行左连接。

我需要在opencart中这样做,但没关系,它只是SQL

$sql = "SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON 
(p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "import i ON (p.ean = i.ean_code) WHERE 
i.import_id = '" . (int)$query->row['import_id'] . "'";

我不知何故需要先WHERE在导入表上做,但在上面的例子中它是在之后做的。我必须执行 2 个查询吗?

标签: phpmysqlsqlopencart

解决方案


尽可能使用参数。您需要将条件移至on子句:

SELECT *
FROM " . DB_PREFIX . "product p LEFT JOIN
     " . DB_PREFIX . "product_description pd
     ON p.product_id = pd.product_id LEFT JOIN
     " . DB_PREFIX . "import i
     ON p.ean = i.ean_code AND 
        i.import_id = ?

您还应该选择明确的列名。这在 a 中尤为重要LEFT JOIN,因为表共享列名(至少product_id)并且您不知道应用程序代码中的“product_id”引用了哪个。


推荐阅读