php - 如何在右表中的特定行上进行左连接?
问题描述
我的网站可能有用户的个人价格表。当我在所有产品表上离开连接导入的产品表时,我不知道该放在哪里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 个查询吗?
解决方案
尽可能使用参数。您需要将条件移至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”引用了哪个。
推荐阅读
- java - 如何在 ArcGIS for Android 中测量 pointGraphicOverlay 到曲折线GraphicOverlay 之间的最小距离?
- python - cc1plus:构建 dlib 时内存不足
- hyperledger-fabric - Hyperledger Fabric:无法运行对等体,因为从目录设置 bccsp 类型的 MSP 时出错:提供的身份无效
- java - 在 ConcurrentModificationException 之后,Java 集合是否保证处于有效、可用的状态?
- python - 在 for 循环中构造变量
- origen-sdk - 可以更改导入子流的组名吗?
- spring - 带有方法参数的 Spring AOP Aspect 建议
- bash - 如何在 Slack 中删除自 DATE 以来的所有文件?
- msbuild - nuget 包中的 .targets 文件 - 如何将内容文件包含到构建中
- python - PIL image.size 给出的值的维度/单位是多少