【问题标题】:Cakephp 1.3 - Ordering a group of resultsCakephp 1.3 - 排序一组结果
【发布时间】:2012-05-24 01:31:15
【问题描述】:

我有以下型号:

$values = $this->PtlUserdata->find('all', array(

    'fields' => array(

        'PtlUserdata.field', 
        'PtlUserdata.value',
        'PtlUserdata.timestamp'

     ), 

     'conditions' => array(

         'PtlUserdata.user_id' => $user->get('id'),

     ),

     'order' => array('PtlUserdata.timestamp' => 'DESC'),
     'group' => array('PtlUserdata.field')

));

我正在尝试按时间戳对结果进行排序,然后按字段对结果进行分组,这样我就可以获得具有该字段名称的最新记录。

有没有人知道 cakephp 是怎么做的?

提前感谢您的帮助,非常感谢:)

【问题讨论】:

  • 这对我来说看起来不错 - 你期望发生的事情没有发生?
  • 嗨,目前发生的情况是结果在添加到组之前没有按时间戳排序。我只想要组中的最新结果。
  • 基本上,我想在 cakephp 模型中执行以下操作: SELECT t1.* FROM ptl_userdata t1 WHERE t1.user_id = 2885 AND t1.timestamp = (SELECT MAX(t2.timestamp) FROM ptl_userdata t2 WHERE t2.user_id = 2885 AND t2.field = t1.field) GROUP BY t1.field

标签: sql cakephp model


【解决方案1】:

这是数据库的默认行为。您必须想出某种解决方法才能做到这一点。

一个想法:CakePHP: Group by ID and Order by date

【讨论】:

    【解决方案2】:

    这行得通吗:

    $values = $this->PtlUserdata->find('all', array(
    
    'fields' => array(
    
        'PtlUserdata.field', 
        'PtlUserdata.value',
        'max(PtlUserdata.timestamp)'
    
     ), 
    
     'conditions' => array(
    
         'PtlUserdata.user_id' => $user->get('id'),
         'PtlUserdata.timestamp' => 'max(PtlUserdata.timestamp)',
     ),
    
     'group' => array(
          'PtlUserdata.field',
          'PtlUserdata.timestamp'
          )
    
    ));
    

    我没有机会对此进行测试,但您肯定需要按PtlUserdata.timestamp 分组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多