2016-03-04 27 views
0

我的表看起來像這樣選擇最後一個值學說查詢

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名=名1和一個id爲5和名稱=名稱2

這是查詢我目前有

$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

你想要什麼結果,你現在得到了什麼結果? –

+0

@eggyal auto_increment列也可以用來確定順序,這在OP – Shadow

+0

中描述在這裏看看:http://stackoverflow.com/questions/6637506/doing-a-where-in-subquery-in-doctrine -2,你的解決方案如何在主體中的clausule中進行子選擇。當然,你需要根據你的情況調整解決方案。 – Miro

回答

1

我給你SQL的做。我認爲你將需要一個原生DQL爲學說

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 

希望這對你有所幫助。

+0

正是我在找的!非常感謝! – Jaimy