CAKEPHP группа по проблеме в пагинате - PullRequest
0 голосов
/ 23 июля 2011

CAKEPHP Группировка по проблеме в paginate ..

Это моя структура таблицы

 Friends Table
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user1_id` int(11) NOT NULL DEFAULT '0',--> UserFrom
  `user2_id` int(11) NOT NULL DEFAULT '0',---> UserTo

Мне нужно получить все уникальные записи одного пользователя и его user1_id = 100

В user2_id много повторяющихся значений.Мне нужно получить уникальные значения. Когда я пытаюсь использовать этот код, он возвращает только первые 12 значений (в соответствии с лимитом).Если я прокомментировал группу построчно, то отображаются все записи (включая повторяющиеся значения)

$this->paginate = array(
                    'conditions' => $conditions,
        'contain'=>array(
            'UserFrom'=>array(
                'fields'=>array(
                   'UserFrom.id',
                   'UserFrom.first_name',
                   'UserFrom.last_name',
                ),
             ),
             'UserTo'=>array(
                'fields'=>array(
                    'UserTo.id',
                    'UserTo.first_name',
                    'UserTo.last_name',
                    )
             )
            ),'limit' => 12,
            'order' => array('Friend.id' => 'desc'),
            'recursive'=>0,
            'fields'=>array('DISTINCT Friend.user2_id','Friend.*'),
            'group'=>array('UserTo.id'),
            );

Это мой sql-запрос на этой странице

SELECT COUNT (*) AS count FROMfriends AS Friend LEFT JOIN users AS UserTo ON (Friend. user2_id = UserTo. id) LEFT JOIN users AS UserFrom ON (Friend. user1_id = UserFrom. id) ГДЕ UserFrom. nick_name = 'shyam' И Friend. status = 'друг' ГРУППА ПО * UserTo. id

ВЫБЕРИТЕ DISTINCT Friend. user2_id, Friend. *, UserTo. id, UserTo. first_name, UserTo. last_name, UserTo. nick_name, UserTo. name, UserTo. icon_medium, UserTo. icon_big, UserFrom. id, UserFrom. first_name, UserFrom. last_name, UserFrom.nick_name, UserFrom. name ОТ friends КАК Friend ВЛЕВО СОЕДИНЯЕТСЯ users КАК UserTo ВКЛ (Friend. user2_id = UserTo. id) ЛЕВОЕ СОЕДИНЕНИЕ* AS UserFrom ON (Friend. user1_id = UserFrom. id) WHERE UserFrom. nick_name = 'shyam' И Friend. status = 'friend' GROUP BY UserTo. id ORDER BY Friend. id desc LIMIT 12

1.Первый счетчик запросов, возвращающий счетчик правильно 2.Второй запрос, если я поставил лимит не работает правильно.то есть в моей таблице 144 записи, которые мне нужно отображать по 12 на страницу ... только первая страница появится, если я использую group by и ограничим

1 Ответ

1 голос
/ 25 июля 2011

У вас должно быть либо DISTINCT , либо GROUP BY, но не оба - они дублируют друг друга и, вероятно, вызывают проблемы с вашим запросом.Удалите один из них и повторите попытку.

Примечание: Если вы хотите вручную запросить страницы, отличные от 1-го, с помощью $this->paginate(), добавьте параметр 'page' с номером страницы.к вашему массиву $this->paginate, например:

$this->paginate = array_merge($this->paginate, array('page' => $pageNumber);

Однако обычно вы не хотите делать это , поскольку paginator делает это автоматически (передавая переменную page через URLпараметр к вашему действию), если вы используете элементы управления пагинацией в своем представлении (см. http://book.cakephp.org/view/1233/Pagination-in-Views).

...