CakePHP SQL转换 - 基本ORDER BY

时间:2013-06-10 07:55:43

标签: php mysql sql cakephp find

我有一个表格,我想让所有的id首先等于26,然后让其余的按降序排序,如下所示:

row    id
---    --

1      26
2      26
3      26
4      27
5      25
6      24

通常会导致:

select id 
from table 
order by id=26 desc, id desc

我应该如何在Cake中构建find()?这就是我的想法:

$this->Model->find('all', array(
    'conditions' => array('Model.id' => 26),
    'order' => array('Model.id' => 'DESC')
));

但是我应该如何判断Cake检索剩下的id并在检索到所有等于26的id之后按降序对它们进行排序?

2 个答案:

答案 0 :(得分:5)

试试这个。

$this->Model->find('all', array(
  'order' => array('Model.id = 26 DESC' , 'Model.id DESC')
));

答案 1 :(得分:0)

假设您的id字段是CakePHP约定所定义的primaryKey,那么您的查询将只返回一个结果。因此,排序与此无关。

我还建议使用find('first')来阻止您以数字方式对单个结果进行索引。

$this->Model->find('first', array('conditions' => array('id' => $id)));

如果您想要返回此单条记录,然后返回所有其他记录,我会将其与find('all')相反。

$this->Model->find('all', array('conditions' => array('id !=' => $id)));