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,则只有第一页出现
您应该有
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)。