检查laravel中的查询,我发现应用ORDER BY不会对查询应用任何子句。
阅读您的要求,您希望在指定的条件下获得具有最大 updatedAt 字段的记录。如果允许,我个人会在视图中选择MAX() 查询,但views 可以被组织限制或不使用,并且很高兴知道如何根据您的问题进行操作,而且这意味着您没有保持一个观点。或者,您可以在子查询中执行MAX(),但这需要更多设置。
首先,您在需要的字段上进行内部连接。其次,您执行左连接以在该连接中查找大于您想要的 MAX 的值。所以我们想要最新的 updatedAt 字段。最后,你WHERE 最大的 updatedAt 值没有比它更大的值,所以它是真正的最大值:该值是NULL。
代码在没有 leftJoin 子句对象的情况下重新混合,我到处传递你的构建器。我看不到您查询的其余部分,但我认为这应该直接插入,因为最多只有 2 个表,即 table2。如果您在 WHERE 子句中提供 1 个 table.id,您将返回 1 行。
更新:您需要对 ID 执行相同操作,因此如果您有 2 个具有相同时间戳的日期时间,则选择 ID 较高的一个:
$sql->join('table2', function ($sql) {
$sql->on('table2.id', '=', "table1.id")
->on('table2.region', '=', "table1.region");
});
$builder->leftJoin('table2 AS biggerThanUpdatedAt', function ($builder) {
$builder->on('table2.id', '=', "biggerThanUpdatedAt.id")
->on('table2.region', '=', "biggerThanUpdatedAt.region")
->on('table2.updatedAt', '<', 'biggerThanUpdatedAt.updatedAt');
});
$builder->leftJoin('table2 AS biggerThanId', function ($builder) {
$builder->on('table2.id', '<', "biggerThanId.id") //<-notice the greater at is here this time.
->on('table2.region', '=', "biggerThanId.region")
->on('table2.updatedAt', '=', 'biggerThanId.updatedAt');
});
$builder->whereNull('biggerThanUpdatedAt.updatedAt');
$builder->whereNull('biggerThanId.id');