【发布时间】:2012-09-15 06:38:17
【问题描述】:
我正在尝试使用 Criteria 和 Propel 创建以下语句:
AND unix_timestamp(table.last_action) > unix_timestamp(table.last_action) -1800
但我似乎无法做到这一点
$kriterien->add(sfGuardUserProfilePeer::LAST_ACTION, 'unix_timestamp(table.last_action)-90', Criteria::GREATER_THEN);
sfGuardUserProfilePeer::LAST_ACTION 不是 unix_timestamp。我怎样才能改变它呢?我已经尝试在BasesGuardUserProfilePeer.php 中简单地更改LAST_ACTION 的值,但它引发了错误。
【问题讨论】:
-
您为什么要这样做?数据库将无法使用任何索引来解析这部分查询,因为您不必要地应用函数;您不需要使用 UNIX 时间戳来修改日期。
something > something - INTERVAL 1800 SECOND。当然,您的查询是没有意义的,因为列不能大于自身... -
什么? :-) 查询工作得非常好something > something - 从现在到半小时前的每一件事都需要 1800 秒
-
不,
something > something - 1800是每一行。所有数字都大于自身减去某个其他数字。something > CURRENT_TIMESTAMP - 1800将是从现在到半小时前的每一行。 -
是的,你是对的。但是 timestamp1 > timestamp2 是否与 unix_timestamp 一起使用?因为它有点不....
-
好的,我知道为什么(尽管这对我来说没有意义)。查询结果是 AND sf_guard_user_profile.LETZTE_AKTION > '(CURRENT_TIMESTAMP - INTERVAL 90 SECOND)' 它的工作方式如下 AND sf_guard_user_profile.LETZTE_AKTION > (CURRENT_TIMESTAMP - INTERVAL 90 SECOND)。我怎么把'拿出来?