按订单更改组

时间:2017-01-05 12:03:57

标签: php mysql symfony doctrine

考虑下表:

id | machine | manual| etc.
1     1          0
2     2          0
3     1          1

我想检索按机器分组的记录。我知道手动记录总是在自动记录之后插入。 在MySQL中,我可以这样做:

SELECT * FROM table GROUP BY machine DESC

检索到的记录是:

id | machine | manual| etc.
2     2          0
3     1          1

因为MySQL的GROUP BY在ASC中工作,它找到的第一个记录就是它所考虑的记录。因此,通过将DESC放置在GROUP BY中它可以反向工作,因为我知道手册总是在此之后才能用于我的解决方案。但我怎么能在Doctrine中做到这一点?

$qb = Query Builder 'b'
$qb->groupBy('b.machine DESC');

有没有人知道在没有子查询的情况下如何做到这一点? 谢谢

1 个答案:

答案 0 :(得分:0)

group by的解决方案违反sql标准,如果在MySQL中配置了sql模式的完整组,则可能无效。这是MySQL最新版本的默认设置。

由于您希望通过自动增量ID识别最新记录,因此您可以使用自left join来实现预期结果:

select t1.*
from table t1
left join table t2 on t1.machine=t2.machine and t1.id<t2.id
where t2.id is null

基本上,使用t1.id<t2.id连接条件,您可以获得同一台机器的t2.id更大的所有记录。如果未找到更大的t2.id,则返回null值 - 表示这是给定计算机的最新记录。这是我们保留where t2.id is null子句的记录。