我遇到了一些问题。使用 JEFT JOIN sql 语句。 我有 3 个表:
用户、产品、产品图片。
table.user user_id
table.products user_id item_id
table.prod_images user_id item_id
当我运行此查询以获取该关系的数据时,它工作正常。 但只有当 prod_images 表不为空时才有效。 当 prod_images 为空时 sql right join 合并结果,我得到 null 到 products.item_id 数组
SELECT products.*, prod_images.*, users.*
FROM products
LEFT JOIN prod_images
ON products.item_id=prod_images.item_id
AND prod_images.is_primary = '1'
JOIN users
ON users.user_id=products.seller_id
WHERE products.status = '1'
ORDER BY created DESC
当 table.prod_images 是空的 ?
最佳答案
我相信你的查询几乎没问题。
它会返回您请求的所有内容,但您应该避免请求 products.*、prod_images.*、users.*
,因为这很容易混淆。
因此,如果您至少将此部分更改为 SELECT products.item_id PRODUCTS_ITEM_ID, products.*, prod_images.*, users.*
另外请注意,当 prod_images
没有相关记录时,您的查询可能不会返回 products.item_id
(因为它 LEFT JOIN
ed ) 但当 users
没有相关记录时,因为它是 INNER JOIN
ed。因此,我将从将 JOIN users
更改为 LEFT JOIN users
开始。
PS 看看@Reno 的评论。我没有提到那个。当然,您应该将 ON products.item_id=products.item_id
更改为 ON products.item_id=prod_images.item_id
关于php - MySql LEFT 连接多个具有相同 ID 或名称的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590393/