我基本上试图从表中提取最后5条记录。 唯一的问题是我不想要一些带有相同x_id的记录,因为我会重复x_id,所以我通过一个'group'条件来实现这个目的。 但是,在添加此新组条件时,会发生奇怪的事情,并且查询的结果会随机省略表的某些行。因此,随机地,一些记录被带来,而一些则没有。所以应该带来的一些记录不是。
例如: 我桌上的最后10条记录是:1-2-3-4-5-6-7-8-9-0 在做完我的查询后,我应该得到结果:0-9-8-7-6 但是,随机,我得到:9-8-6-5-3或0-8-7-6-4
基本上它会跳过一些记录shit = //
$condicionesComentarios = array('conditions' => array('Comentario.aceptado' => 1), 'limit' => 5, 'order' => 'Comentario.id DESC', 'group' => array('Comentario.empresa_id'));
$ultimosComentarios = $this->Empresa->Comentario->find('all', $condicionesComentarios);
澄清更新
Empresa hasMany Comentario
Comentarios表的一小部分:
**id** **empresa_id**
1 7
2 9
3 3
4 1
5 1
6 4
7 8
8 5
预期结果:表格中的最后5条记录,没有重复的empresa_id
查询结果 - > (id = 8,7,6,5,3)*请注意,应跳过id为4的行,以避免empresa_id重复*
我得到的东西:有些记录在不应该被随机跳过。
查询结果 - > (id = 7,6,5,2,1)请注意,此处不应跳过id:8的行,但它仍然是。
答案 0 :(得分:0)
您的ORDER BY
位于一列(Comentario.id
)上,GROUP BY
位于另一列(Comentario.empresa_id
)上。
根据您的描述,您可能希望按相同的列排序和分组:
$condicionesComentarios = array(
'conditions' => array('Comentario.aceptado' => 1),
'limit' => 5,
'order' => 'Comentario.empresa_id DESC',
'group' => array('Comentario.empresa_id'));
UPDATE :听起来你想要的是来自每个组的MAX(id)。在SQL中,您将使用此查询:
select max(id) from Comentarios where Comentario.aceptado
group by empresa_id order by id desc limit 5;
在CakePHP中,您可以将其写为:
$condicionesComentarios = array(
'fields' => array('max(Comentario.id)'),
'conditions' => array('Comentario.aceptado' => 1),
'limit' => 5,
'order' => 'Comentario.id DESC',
'group' => array('Comentario.empresa_id'));
答案 1 :(得分:0)
$condicionesComentarios = array(
'conditions' => array('Comentario.aceptado' => 1),
'limit' => 5, 'order' => 'max(Comentario.id) DESC',
'group' => array('Comentario.empresa_id'),
'fields' => array('max(Comentario.id)', 'Comentario.empresa_id'));
正如您所看到的,我必须修改“订单”并为“字段”添加额外条件。 它的作用:从Comentarios表中获取最后5行,但不从最后一行中重复empresa_id字段。
感谢您的帮助;)