php - 如何只匹配 Doctrine 中最近更新的记录?

标签 php mysql doctrine-orm symfony

我正在使用 Symfony2 和 Doctrine 开发一个应用程序,并且有一个名为 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”中。

以下代码获取在某个时候位置为“家”的任何记录:

$em = $this->getEntityManager();
$query = $em->createQuery('SELECT s FROM myBookTestBundle:Status s WHERE s.location=:x')->setParameter('x', 'Home');
$status = $query->getResult();

相反,我只想选择那些当前 位置与“主页”匹配的图书。在上面的例子中,那只会是记录 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';

关于php - 如何只匹配 Doctrine 中最近更新的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7411363/

相关文章:

mysql - Symfony2 - 如何在 Doctrine 中使用一种形式将值插入到两个不同的表中?

php - 不能在写上下文中使用函数返回值

php - 检查运行两个版本的 DirectAdmin 的 PHP 版本

java - 从 Windows 7 使用 Runtime.getRuntime().exec(cmd) 调用 "mysqldump"

MySQL 错误 #1415 - 不允许从函数返回结果集

mysql - DQL innerJoin 查询等效项

php - Doctrine - 存储 ArrayCollection 键

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数1是资源

mysql - Pentaho 水壶 : enter field mapping error?

php - 如何在 Doctrine query builder 的 'orderBy()' 上使用更高级的参数?