CAKEPHP Group by problem in paginate..
This is my table structure
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
I need to get all the unique records of one user and his user1_id = 100
There are lot of duplicate values in user2_id. I need to get the unique values While i trying this code it returns only first 12 values(according to limit). If i commented the group by line then all records are displaying (including duplicate values)
$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'),
);
This is my sql query on that page
SELECT COUNT(*) AS count
FROM friends
AS Friend
LEFT JOIN users
AS UserTo
ON (Friend
.user2_id
= UserTo
.id
) LEFT JOIN users
AS UserFrom
ON (Friend
.user1_id
= UserFrom
.id
) WHERE UserFrom
.nick_name
= 'shyam' AND Friend
.status
= 'friend' GROUP BY UserTo
.id
SELECT 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
FROM friends
AS Friend
LEFT JOIN users
AS UserTo
ON (Friend
.user2_id
= UserTo
.id
) LEFT JOIN users
AS UserFrom
ON (Friend
.user1_id
= UserFrom
.id
) WHERE UserFrom
.nick_name
= 'shyam' AND Friend
.status
= 'friend' GROUP BY UserTo
.id
ORDER BY Friend
.id
desc LIMIT 12
1.First count query returning count properly 2.Second query if i put limit it not working properly. i.e there are 144 records in my table i need to display 12 per page.. only first page coming if i use group by and limit
You should have either DISTINCT
or GROUP BY
, not both - they're duplicating each other and probably causing problems with your query. Remove one of them and retry.
Note: If you want to manually request pages other than 1st with $this->paginate()
, add 'page'
parameter with page number to your $this->paginate
array, like this:
$this->paginate = array_merge($this->paginate, array('page' => $pageNumber);
However, normally you wouldn't want to do this, as paginator does this automatically (passing page
variable via URL parameter to your action) as long as you use pagination controls in your view (see http://book.cakephp.org/view/1233/Pagination-in-Views).