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 または 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);

明確化のための更新

エンプレサには多くのコメントがあります

コメンタリオ表のごく一部:

**id**     **empresa_id**
1           7
2           9 
3           3
4           1
5           1
6           4
7           8
8           5

期待される結果: テーブルの最後の 5 レコード、empresa_id の繰り返しなし

query result-> (id = 8, 7, 6, 5, 3) *empresa_id の繰り返しを避けるため、id: 4 の行はスキップする必要があることに注意してください*

私が得たもの: 一部のレコードは、スキップされるべきではないときにランダムにスキップされます。

query result-> (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

ジョニ あなたはほぼ正しかった、私を軌道に乗せてください。コード自体は機能していませんでしたが、小さな変更で正しく機能しました。

$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 フィールドを繰り返さずに取得します。

助けてくれてありがとう ;)

于 2012-09-23T20:50:39.687 に答える