【问题标题】:Doctrine: How to do a UPDATE with a SELECT MIN subquery?教义:如何使用 SELECT MIN 子查询进行更新?
【发布时间】:2010-03-08 17:30:53
【问题描述】:

我有一个照片表,用户可以在其中拥有多张照片。

我正在尝试创建以下查询:

$q = Doctrine_Query::create()
   ->update('Photo p')
   ->set('p.photo_type', 1)
   ->where('p.user_id = ?', $id)
   ->andWhere('p.date_added = (SELECT MIN(p.date_added) FROM Photo p WHERE p.user_id = ?)', $id)

我们的想法是将“photo_type”设置为 1,以便为该用户添加了最短日期的特定照片(最早的照片)。

我似乎无法正确使用语法。有人能指出我正确的方向吗?

谢谢。

编辑:

根据这个问题的答案 (MySQL Error 1093 - Can't specify target table for update in FROM clause),我似乎正在尝试做一些无法完成的事情。这个问题可以结束了。

【问题讨论】:

  • 在使用像 MIN 这样的聚合函数时不需要 GROUP BY 吗?此外,您可以将您的选择表变成一个连接或简单地使用表变量或哈希表重写
  • 首先尝试将 GROUP BY date_added 放在 WHERE 子句之前

标签: select doctrine subquery


【解决方案1】:

试试这个:

$q = Doctrine_Query::create()
   ->update('Photo p')
   ->set('p.photo_type', 1)
   ->where('p.user_id = ?', $id)
   ->orderBy('p.date_added', 'desc')
   ->limit(1);

【讨论】:

  • 是的,这会起作用的……不过,应该由 ASC 订购。 DESC 将从最大(最新)日期开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多