CAKEPHP Group by 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
FROM friends
AS Friend
LEFT JOIN users
AS UserTo
ON(Friend
。{{1 }} = user2_id
。UserTo
)LEFT JOIN id
AS users
ON(UserFrom
。Friend
= user1_id
。{{ 1}})WHERE UserFrom
。id
='shyam'和UserFrom
。nick_name
='朋友'GROUP BY Friend
。status
< / p>
SELECT DISTINCT UserTo
。id
,Friend
。*,user2_id
。Friend
,UserTo
。id
,{ {1}}。UserTo
,first_name
。UserTo
,last_name
。UserTo
,nick_name
。UserTo
,{{1 } {。{}},name
。UserTo
,icon_medium
。UserTo
,icon_big
。UserFrom
,id
。UserFrom
,first_name
。UserFrom
FROM last_name
AS UserFrom
LEFT JOIN nick_name
AS UserFrom
ON(name
。friends
= Friend
。users
)LEFT JOIN UserTo
AS Friend
ON(user2_id
。UserTo
= {{1} }。id
)WHERE users
。UserFrom
='shyam'和Friend
。user1_id
='朋友'GROUP BY UserFrom
。{{ 1}} ORDER BY id
。UserFrom
desc LIMIT 12
1.First count查询返回计数正确 2.如果我限制它不能正常工作,则进行第二次查询。即我的表中有144条记录,我需要每页显示12条记录..如果我使用分组和限制,则只有第一页出现
答案 0 :(得分:1)
您应该拥有DISTINCT
或 GROUP BY
,而不是两者兼而有之 - 它们相互重复并可能导致您的查询出现问题。删除其中一个并重试。
注意:如果您希望手动使用$this->paginate()
请求第1页以外的网页,请将'page'
参数和页码添加到{{1} 1}}数组,像这样:
$this->paginate
但是,通常你不想这样做,因为paginator会自动执行此操作(通过URL参数将$this->paginate = array_merge($this->paginate, array('page' => $pageNumber);
变量传递给您的操作),只要您使用分页控件即可你的观点(见http://book.cakephp.org/view/1233/Pagination-in-Views)。