考虑下表:
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');
有没有人知道在没有子查询的情况下如何做到这一点? 谢谢
答案 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
子句的记录。