Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:子查询是正确的做法吗?_Php_Mysql - Fatal编程技术网

Php MySQL:子查询是正确的做法吗?

Php 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=

我有几个产品,每个都有几个图像。 我试图显示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' 限制3
您的问题标题提到了一个相关子查询,但实际上这不是一个相关子查询;它是您要加入的常规不相关子查询。因此,子查询首先在联接之前执行,并且只从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列???