【问题标题】:Propel ORM including MAX in criteria推动 ORM,包括标准中的 MAX
【发布时间】:2009-12-08 17:50:33
【问题描述】:

我正在使用 Propel ORM 编写查询

查询格式为:

select * from some_table where some_table.created_at = (SELECT MAX(some_table.created_at) from some_table);

我已经走到这一步了:

 $c = new Criteria();
 $c->addSelectColumn('MAX('.self::CREATED_AT.')');

任何人都知道如何使用 Propel 来执行此操作,以节省我编写 RAW SQL 的时间吗?

【问题讨论】:

    标签: propel


    【解决方案1】:

    如果您只想知道如何添加自定义 WHERE 值,那么 @prodigitalson 的解决方案应该可以工作,但我想知道为什么您首先要这样做而不是仅仅这样做:

    $recs = SomeTableQuery::create()->orderByCreatedAt()->findOne();
    

    ...这将为您提供最新创建的记录。

    【讨论】:

    • 这对我有帮助,谢谢。我也想获得某个列的 MAX 值,但你的方法效果很好。只需订购该列 desc 和 findone。再次感谢。
    • 当然可以。就像我说的,只是想提一下业务问题的可能替代解决方案,而不是如何使用MAX()
    【解决方案2】:

    试试:

    $c = new Criteria();
    $c->add(SomeTable::CREATED_AT, '(SELECT MAX('.SomeTable::CREATED_AT.') FROM some_table)', Criteria::CUSTOM);
    

    【讨论】:

      【解决方案3】:

      没有提到这种方式 - 所以这对我有用:

      MyTable::create() 
      ->select('max_id') 
      ->addAsColumn('max_id', 'MAX(id)')
      ->findOne();
      

      find() 返回一个对象集合,所以使用 findOne()

      addAsColumn() 只返回选定的列。

      【讨论】:

        【解决方案4】:

        我无法让 ->withColumn('MAX(itemrevisionID)') 工作,所以解决方法是 ->orderByitemrevisionID('desc')

        【讨论】:

          猜你喜欢
          • 2013-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-26
          • 2017-01-09
          • 2021-12-23
          • 1970-01-01
          相关资源
          最近更新 更多