Php 如何仅匹配条令中最后更新的记录?
我正在使用Symfony2和条令开发一个应用程序,并且有一个名为status的表,我在其中存储位置和日期簿,例如: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
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)