当前位置: 首页 > 知识库问答 >
问题:

YI2,如何在leftjoin上添加限制,使其只能返回1个结果

甘祺
2023-03-14

我正在尝试从product表中获取所有记录,这些记录是唯一的,但我使用leftjoin添加第二个表,其中包含这些产品的图像,但当我这样做时,它会多次返回一些产品,因为一些产品有一个或多个图像。我如何在product_images表上使用限制来确保它只得到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();

共有1个答案

轩辕天佑
2023-03-14

可以通过子查询来解决:

    $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();

您必须在product_images表上使用组合索引才能获得良好的性能

您可以将其他排序用作Order by ID,例如,您可以在表Product_Images中引入一个ordering字段。

我认为a.id=b.ida.id=c.id是一个简单的错误。这是关于a.id=B.PRODUCT_IDa.id=C.PRODUCT_ID的。

 类似资料:
  • 问题内容: 在Internet上,我发现了一个非常有用的类,可以使用它来限制TextField。我遇到了一个问题,我的TextField只能包含一个“。”。字符。我怀疑我可以通过编写适当的正则表达式并将其设置为对该类实例的限制来处理此问题。我使用以下正则表达式:“ [0-9.-]”,但它允许用户输入的点数尽可能多。我可以请您帮助我配置TextField,以便不超过一个“。”。被允许。 } 问题答案

  • 问题内容: 我需要查询里面有很多在它的数据的Sybase数据库,并希望设置限制,因此DB后10个结果停止查询。 关键的是性能,因此,如果找遍了所有结果,然后再回到过去的10个结果将是没有用的。 提前致谢 问题答案: 我相信你可以做一个,然后再在这个环节中的所有查询,直到进一步的将返回不超过10行。正如评论指出,这会影响 所有 在会议之后的查询(不只是S ^!),直至关闭(通过设置为0),或设置不同

  • 问题内容: 我的视图中有一个按钮和文本文本字段。当我单击文本字段时,会出现一个键盘,并且我可以在文本字段上书写,并且还可以通过添加以下内容单击按钮来关闭键盘: 现在我要启用键盘的返回键。当我按键盘时,键盘会消失,并且会发生某些事情。我怎样才能做到这一点? 问题答案: 确保“自我”订阅并初始化inputText: 将以下方法添加到“自身”: 或在Swift中:

  • 因此,我正在对最新的DynamoDBEnhancedAsyncClient使用分页。 然而,在上应用限制()时,它并没有限制单个页面上的项目。示例:如果我通过仍然在中显示2条记录。不确定是以项目数为参数还是以页数为参数。如果是它的页面,有没有办法限制每页的数量?我们知道DDB创建的页面最大大小为1MB。但我们的json记录以字节为单位,这意味着每页将获取的记录。这不是效率低下吗?是否可以限制每页的

  • 问题内容: 如果我有多个选择,例如: …如果第一个选择返回内容,我得到1个结果集。但是,如果运行第二个,我将得到两个结果集。第一个没有行,第二个没有行。 如果运行第二个选择,是否有办法仅返回第二个结果集? 谢谢! 问题答案: 您需要通过 在 运行选择 之前 检查是否会返回任何结果来阻止首次选择。 例如: