Php MySQL:子查询是正确的做法吗?
我有几个产品,每个都有几个图像。 我试图显示3个产品,其中只有1个对应的图像 通过下面的代码,我得到了3种不同的产品,其中只有一个图像被成功显示。 如果我去掉子查询限制1,我会得到3个相同产品的不同图像 任何帮助都将不胜感激 选择pro.id, pro.title作为产品名称, 支持价格, 图像, img.title作为图像标题, 从产品到专业 左连接 选择产品标识、图像库标识 来自图像和产品 限制1为IP 在ips.product_id=pro.id上 左连接图像库作为img 在img.id=ips.image\u library\u id上 其中pro.status_id='1' 限制3Php MySQL:子查询是正确的做法吗?,php,mysql,Php,Mysql,我有几个产品,每个都有几个图像。 我试图显示3个产品,其中只有1个对应的图像 通过下面的代码,我得到了3种不同的产品,其中只有一个图像被成功显示。 如果我去掉子查询限制1,我会得到3个相同产品的不同图像 任何帮助都将不胜感激 选择pro.id, pro.title作为产品名称, 支持价格, 图像, img.title作为图像标题, 从产品到专业 左连接 选择产品标识、图像库标识 来自图像和产品 限制1为IP 在ips.product_id=pro.id上 左连接图像库作为img 在img.id=
您的问题标题提到了一个相关子查询,但实际上这不是一个相关子查询;它是您要加入的常规不相关子查询。因此,子查询首先在联接之前执行,并且只从images\u产品返回一条记录。因此,您最多可以获得一个工作图像。我相信你想要的问题是:
SELECT pro.id,
pro.title AS product_title,
pro.price,
img.image,
img.title AS image_title
FROM products AS pro
LEFT
JOIN image_library AS img
ON img.id =
( SELECT image_library_id
FROM images_products AS ips
WHERE ips.product_id = pro.id
LIMIT 1
)
WHERE pro.status_id = '1'
LIMIT 3
;
使用真正的相关子查询。测试。谢谢,我现在就试试。很好……我想出了一些非常类似的东西。我唯一不同的做法是使用内部连接而不是左连接,以防我遇到没有任何图像的产品。@BryceAtNetwork23:我假设如果产品没有任何图像,那么它应该在没有图像的情况下显示。这两种方式都可以,因为在创建产品时图像是必需的。只是在代码中查找一些愚蠢的东西,因为它不能立即工作。ThanksI不得不将pro.product_id更改为pro.id,这会导致基数冲突:1241个操作数应该包含1列???