我的表看起来像这样
id | name | revision_number | form_key | locked
---------------------------------------------------
1 | Name1 | 1 | abcd | true
2 | Name2 | 1 | efgh | false
3 | Name1 | 2 | abcd | true
4 | Name2 | 2 | efgh | true
5 | Name2 | 3 | efgh | true
现在我想获取最后锁定的表单,基于form_key,所以在这种情况下,id = 3和name = Name1的那个以及id = 5且name = Name2
的表单这是我目前的查询
$revisionQuery =$em->getRepository('AppBundle:Form')->createQueryBuilder('f')
->select('f')
->where('f.lockBit = :locked')
->andWhere('f.revisionNumber = (SELECT MAX(f2.revisionNumber) FROM AppBundle:Form f2 WHERE f.formKey = f2.formKey GROUP BY f2.formKey)')
->setParameters(['locked' => true]);
但这并没有给我我想要的结果。
答案 0 :(得分:1)
我为你提供了SQL来做到这一点。我认为你需要一个Native DQL for Doctrine
SELECT
f.id,
f.`name`,
f.revision_number,
f.form_key
FROM
form f
INNER JOIN (
SELECT
max(ff.revision_number) AS revision,
ff.form_key
FROM
form ff
GROUP BY
ff.form_key
) tt ON f.form_key = tt.form_key
AND f.revision_number = tt.revision
希望这对你有所帮助。