CAKEPHP Group由分页中的问题组成

时间:2011-07-23 09:25:37

标签: cakephp cakephp-1.3

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_idUserTo)LEFT JOIN id AS users ON(UserFromFriend = user1_id。{{ 1}})WHERE UserFromid ='shyam'和UserFromnick_name ='朋友'GROUP BY Friendstatus < / p>

SELECT DISTINCT UserToidFriend。*,user2_idFriendUserToid,{ {1}}。UserTofirst_nameUserTolast_nameUserTonick_nameUserTo,{{1 } {。{}},nameUserToicon_mediumUserToicon_bigUserFromidUserFromfirst_nameUserFrom FROM last_name AS UserFrom LEFT JOIN nick_name AS UserFrom ON(namefriends = Friendusers)LEFT JOIN UserTo AS Friend ON(user2_idUserTo = {{1} }。id)WHERE usersUserFrom ='shyam'和Frienduser1_id ='朋友'GROUP BY UserFrom。{{ 1}} ORDER BY idUserFrom desc LIMIT 12

1.First count查询返回计数正确 2.如果我限制它不能正常工作,则进行第二次查询。即我的表中有144条记录,我需要每页显示12条记录..如果我使用分组和限制,则只有第一页出现

1 个答案:

答案 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)。