mysql - 我可以在不覆盖默认分页的情况下对自定义查询进行分页吗?

标签 mysql cakephp pagination having

在我的 CakePHP (1.2) 应用程序中,我有两个都使用分页的操作 - 索引和搜索。

在上一个问题中,我了解到,为了将阈值分数应用于搜索结果,我需要使用 HAVING MySQL 关键字。由于 CakePHP 本身不支持此功能,因此我需要下拉到自定义查询才能完成此操作。

我能找到的关于自定义查询分页的所有指南都涉及覆盖 paginate()paginateCount() 方法。

由于我仍然希望能够在索引上正常分页,所以我不想更改模型中的正常分页行为。

有什么办法可以让我(咳咳)吃到我的蛋糕吗?

最佳答案

实际上,如果您可以使用 find 做到这一点,那么您也可以使用 paginate 做到这一点。你可以看看here

但更具体地说,您可以将在查找中使用的条件/限制/字段/包含/顺序等添加到分页功能。

我没有在分页中使用组,但它应该工作 :D

在你的情况下你会有这样的东西:

$this->paginate = array(
   'fields' => array(
        'Product.category_id',
        'COUNT(Product.hotel_id) as total'
    ),
   'group' => array(
        'Product.category_id HAVING COUNT(Product.hotel_id) > 1')
    )
);

$data = $this->paginate('Product');

希望它能起作用,发表你的结果的评论,如果它不起作用你将不得不覆盖它,因为它不接受组条件......虽然我认为它会起作用,因为分页是在结束。

编辑:

你可以尝试做这样的事情:

重写 paginate() 和 paginateCount() 但稍加调整,潜入一个条件,以便您可以判断它是否具有分页。像这样:

function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()){
   //if no having conditions set return the parent paginate 
   if (empty($conditions['having'])
       return parent::paginate($conditions, $fields, $order, $limit, $page, $recursive, $extra)
   //if having conditions set return your override

//override code here

}

然后你在 paginateCount() 中做类似的事情,这样你就有了选择性分页。记住在不需要时执行 unset $conditions['having'] 或记住将其放在不影响查找的地方;)

关于mysql - 我可以在不覆盖默认分页的情况下对自定义查询进行分页吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569910/

相关文章:

php - SQL注入(inject)mysql_real_escape_string

cakephp - $html->cakephp 中的链接中的警报框

c++ - 通过 CakePHP 与 C++ 应用程序交互

css - Angular SlickGrid 是否可以使用分页并根据值设置行颜色?

azure - 列出容器中具有 1000 多个(大量文件)的 Blob。 [AZURE-存储][休息]

php - 显示当前数据库记录

MySQL : selecting the X smallest values

python - 为什么 python mysql 连接器不接受登录作为变量?我该如何修复它?

javascript - 在 cakePHP 中使用 UnderscoreJS 函数

php在使用分页脚本时获取帖子数据