0

我基本上是在尝试从表中提取最后 5 条记录。唯一的问题是我不希望带来一些具有相同 x_id 的记录,因为我会重复 x_id,所以我通过一个“组”条件来实现这一点。但是,当添加这个新的组条件时,会发生一些奇怪的事情,并且查询的结果会随机省略表中的某些行。所以,随机地,一些记录被带来,而一些则没有。所以有些本该带的记录却没有。

例如:我表中的最后 10 条记录是:1-2-3-4-5-6-7-8-9-0 进行查询后,结果应该是:0-9-8-7- 6 但是,我随机得到:9-8-6-5-3 OR 0-8-7-6-4

基本上它会跳过一些记录 =//

$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 有很多评论

评论表的一小部分:

**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 的行不应被跳过,但仍然如此。

4

2 回答 2

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'));

更新:听起来你想要的是每个组的 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'));
于 2012-09-20T16:05:37.793 回答
0

Joni,你几乎是对的,让我走上正轨。您的代码本身无法正常工作,尽管稍作修改使其正常工作:

$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'));

如您所见,我必须修改“订单”并为“字段”添加额外条件。再次说明它的作用:从 Commentarios 表中提取最后 5 行,但不从最后几行中重复 empresa_id 字段。

谢谢您的帮助 ;)

于 2012-09-23T20:50:39.687 回答