Find省略了表中的一些记录

时间:2012-09-19 19:17:22

标签: cakephp find conditional-statements

我基本上试图从表中提取最后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的行,但它仍然是。

2 个答案:

答案 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)

乔尼,你几乎是对的,让我走上正轨。您的代码perse无法正常工作,尽管进行了一些小修改使其正常工作:

$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字段。

感谢您的帮助;)