Php SQL嵌套查询.第2部分

Php SQL嵌套查询.第2部分,php,sql,join,left-join,Php,Sql,Join,Left Join,就在前几天,我问了一个关于将查询嵌套在一起的问题——简言之,就是当第二个表中可能有或没有链接行时,如何从两个不同的相关表中提取数据。这让我走上了左/右连接的道路,很容易找到。然而,现在我遇到了一个全新的问题,这让我很困惑 当使用左/右连接(让我们假设在本问题的其余部分它只是一个左连接)收回信息时,在表B中有多个匹配行的场景中,表a的信息会在每次找到表B中的匹配时被收回,这也会导致完全新的行被收回。在进行左联接时,是否有方法聚合表B中的信息 例如,假设我们有一个产品表,其中只有一个产品行,还有一个

就在前几天,我问了一个关于将查询嵌套在一起的问题——简言之,就是当第二个表中可能有或没有链接行时,如何从两个不同的相关表中提取数据。这让我走上了左/右连接的道路,很容易找到。然而,现在我遇到了一个全新的问题,这让我很困惑

当使用左/右连接(让我们假设在本问题的其余部分它只是一个左连接)收回信息时,在表B中有多个匹配行的场景中,表a的信息会在每次找到表B中的匹配时被收回,这也会导致完全新的行被收回。在进行左联接时,是否有方法聚合表B中的信息

例如,假设我们有一个产品表,其中只有一个产品行,还有一个图像表,它有6个图像行,都链接到产品表中的一个产品

假设我们使用以下查询:

SELECT product_name, large_image, medium_image FROM products
LEFT JOIN images ON images.image_product_Id = products.productId
这将向后拉6行,每行中都有产品名称的重复信息,但大图像和中图像的信息是唯一的

是否有一种方法可以将这些信息提取到一行中,并嵌套images表中的行?返回一行的结果,以及作为列向后拉的关联数组中6个图像的图像信息

理想情况下,此信息将返回为:

[
  1 => [ product_name => 'Apple iPhone',
         images => [
         {
            large_image=>'image1.jpg',
            'medium_image'=>'image1_m.jpg'
         },
         {
            large_image=>'image2.jpg',
            medium_image=>'image2_m.jpg'}
            ...
         ]
       ]
]
我目前能想到的唯一解决方案是在一次查询中提取产品的信息:

SELECT product_name, productId FROM products
在迭代该信息的同时,对数据库中的每一行进行后续查询,以获取该产品的所有图像:

SELECT large_image, medium_image FROM images WHERE images.image_product_Id 
= '$productId'
其中,“$productId”是我为第二个查询提供的参数,它表示第一个查询中的productId列。这似乎不仅效率低下,而且编程实践也很糟糕。有人能给我指出正确的方向吗

我希望我能把这个词说清楚——如果不能,请让我知道我能把这个词做得更好


提前感谢:)

根据您的问题,我找到了适合您的答案,请参阅下面的SQL

选择产品名称,
组_CONCAT(清晰的大_图像)作为大图像,
组_CONCAT(不同的中_图像)作为中_图像
来自产品
左连接images.image\u product\u Id=products.productId上的图像
按产品ID分组

根据您的问题,我找到了一个适合您的答案,请参见下面的SQL

选择产品名称,
组_CONCAT(清晰的大_图像)作为大图像,
组_CONCAT(不同的中_图像)作为中_图像
来自产品
左连接images.image\u product\u Id=products.productId上的图像
按产品ID分组

中选择产品名称、大图像、中图像,然后在图像中选择产品左连接图像。图像\u产品\u Id=products.productId按产品名称分组如何,来自产品的中\u图像左连接图像上的图像。图像\u产品\u Id=产品。产品Id按产品\u名称分组