Yii2,如何在 leftjoin 上添加 LIMIT 以仅返回 1 个结果

Yii2, how to add a LIMIT on a leftjoin to get only 1 result back

我正在尝试从产品 table 获取所有记录,这些记录是唯一的,但我使用 leftjoin 添加第二个 table 和这些产品的图像,但是当我这样做时return 有些产品不止一次,因为有些产品有 1 张或多张图片。我如何使用 product_images table 的限制来确保它只会获得 1 张图像而不是全部图像。下面的示例不起作用,这可能吗?

$query->select( ['a.id', 'b.image as category_image' , 'c.image as product_image'] )
        ->from( ['a' => 'product'] )
        ->leftJoin( ['b' => 'product_images'] ,'a.id = b.id AND b.type = "category" AND LIMIT = 1')
        ->leftJoin( ['c' => 'product_images'] ,'a.id = c.id AND b.type = "product" AND LIMIT = 1')
        ->all();

可以通过子查询解决:

    $query->select(['a.id', 'b.image as category_image' , 'c.image as product_image'])
        ->from(['a' => 'product'])
        ->leftJoin(['b' => 'product_images'],
            'a.id = b.product_id AND b.id = (
                select id from product_images where product_id = a.id AND type = "category" order by id limit 1)')
        ->leftJoin(['c' => 'product_images'],                        
            'a.id = c.product_id AND c.id = (
                select id from product_images where product_id = a.id AND type = "product" order by id limit 1)')
        ->all();

您必须在 table product_images 上使用复合索引才能获得良好的性能。

您可以使用其他排序方式 order by id,例如您可以在 table product_images.

中引入一个排序字段

我认为 a.id = b.ida.id = c.id 是一个简单的错误。这是关于 a.id = b.product_ida.id = c.product_id.