php - MySql LEFT 连接多个具有相同 ID 或名称的表

标签 php mysql sql-server join

我遇到了一些问题。使用 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 JOINed ) 但当 users 没有相关记录时,因为它是 INNER JOINed。因此,我将从将 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/

相关文章:

php - 在 mySQL 数据库中安全地存储值

mysql - SQL 查询左连接问题

sql-server - SQL Server 中的数据本地化与 GUID 或...?

php - MsSQL编码问题

PHPMailer 内容传输编码

php - 处理程序类错误 - Laravel

mysql - 如何在 MySQL 中使用子字符串分组

sql-server - sql server 有简单的前端吗?

php - 如何在 PHP 中绘制图形?

MySql - 如果存在则删除表 'whatever' 否则创建表 'whatever'?