Php 如何仅匹配条令中最后更新的记录?

Php 如何仅匹配条令中最后更新的记录?,php,mysql,doctrine-orm,symfony,Php,Mysql,Doctrine Orm,Symfony,我正在使用Symfony2和条令开发一个应用程序,并且有一个名为status的表,我在其中存储位置和日期簿,例如: ID | Book | Date | Location ------------------------------------------------ 1 | Book_1 | 2011-08-29 | Home 2 | Book_1 | 2011-08-30 | Office 3 | Book_1 | 201

我正在使用Symfony2和条令开发一个应用程序,并且有一个名为status的表,我在其中存储位置和日期簿,例如:

ID  | Book        | Date       | Location
------------------------------------------------
1   | Book_1      | 2011-08-29 | Home
2   | Book_1      | 2011-08-30 | Office
3   | Book_1      | 2011-09-02 | Friend's House
4   | Book_2      | 2011-09-02 | Office
5   | Book_2      | 2011-09-04 | Home
带有最近日期的状态记录表示该书的当前位置。在上面的示例中,Book_1当前在“Friend’s House”中,Book_2在“Home”中

以下代码获取在某个点上具有“Home”位置的任何记录:

相反,我只想选择那些当前位置与“Home”匹配的书籍。在上面的示例中,只有记录ID=5(Book_2)

有什么方法可以用DQL轻松做到这一点吗

非常感谢您的帮助

谢谢,
拉尔夫

另一个问题是:“Doctrine2的DQL能处理子选择吗?”

MySQL的查询将是:

select ID,Book,`Date`,Location 
  from Status a 
  where `Date` = 
    (select max(`Date`) from Status group by Book having Book = a.Book) 
    and Location = 'Home';

谢谢你的回复。我还发现了以下资源:

我能够将其应用到以下正常工作的DQL中:

SELECT s1 FROM myBookTestBundle:Status s1 WHERE s1.Location=:location
AND s1.Date=(SELECT MAX(s2.Date) FROM myBookTestBundle:Status s2 WHERE s1.Book=s2.Book)
然而,根据上面的文章,使用具有左连接的不相关子查询更有效。但是如果我尝试编写与DQL等价的代码,就会得到一个错误。我在某个地方读到,条令不支持FROM/JOIN语句中的子查询

有人能证实这一点吗?还有,有没有办法使上述DQL尽可能地最有效

再次感谢,
拉尔夫

SELECT s1 FROM myBookTestBundle:Status s1 WHERE s1.Location=:location
AND s1.Date=(SELECT MAX(s2.Date) FROM myBookTestBundle:Status s2 WHERE s1.Book=s2.Book)