CAKEPHP 按分页问题分组

问题描述 投票:0回答:1

CAKEPHP 按分页问题分组..

这是我的表格结构

 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 查询

选择 COUNT(*) AS

count
FROM
friends
AS
Friend
左连接
users
AS
UserTo
ON (
Friend
.
user2_id
=
UserTo
.
id
) 左连接
users
AS
UserFrom
ON (
Friend
.
user1_id
=
UserFrom
.
id
) WHERE
UserFrom
.
nick_name
= '害羞' AND
Friend
.
status
= '朋友' GROUP BY
UserTo 
.
id

选择不同的

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
AS
Friend
左连接
users
AS
UserTo
ON (
Friend
.
user2_id
=
UserTo
.
id 
)左连接
 users
AS
UserFrom
ON (
Friend
.
user1_id
=
UserFrom
.
id
) 其中
UserFrom
.
nick_name
= '害羞' AND
Friend
.
status
= '朋友' 分组依据
UserTo
.
id
订购方式
Friend
.
id
desc LIMIT 12

1.第一次计数查询正确返回计数 2.第二个查询,如果我设置限制,它无法正常工作。即我的表中有 144 条记录,我需要每页显示 12 条记录。如果我使用 group by 和 limit,则只有第一页出现

php cakephp cakephp-1.3
1个回答
1
投票

您应该有

DISTINCT
GROUP BY
,而不是两者都有 - 它们相互重复,可能会导致您的查询出现问题。删除其中之一并重试。

注意: 如果您想使用 $this->paginate()

手动
请求除第 1 之外的页面,请将带有页码的
'page'
参数添加到您的
$this->paginate
数组中,如下所示:

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

但是,通常您不想这样做,因为分页器会自动执行此操作(通过 URL 参数将

page
变量传递给您的操作),只要您在视图中使用分页控件(请参阅 http:// book.cakephp.org/view/1233/Pagination-in-Views)。

© www.soinside.com 2019 - 2024. All rights reserved.