在CakePHP 1.2中显示Oracle分页查询

时间:2011-03-25 00:12:27

标签: mysql oracle pagination cakephp-1.2

在CakePHP中使用分页时,查询如何工作?是吗:

a)查询整个记录集,只显示分页设置指定的记录?

b)根据分页设置仅查询记录的子集?

如果不使用选项“b”,我想避免对数百万条记录进行查询。我一直在网上搜索几个小时,我找不到任何东西。

如果是选项“a”,您知道任何将分页转换为选项“b”的自定义吗?我正在使用Oracle,所以标准

SELECT * FROM `table`
LIMIT 60 , 30

在Oracle中不像在MySQL中那样起作用。但我可以根据需要轻松地将MySQL样本转换为Oracle。

更新:它似乎正确地限制了数据,但我无法确定查询是否确实存在。当我在dbo_source.php中回显结果时,它只返回由分页限制定义的记录数。奇怪的是,它不会显示用于对记录进行分页的实际查询。它可能是在查询之前传递的oracle设置吗?

3 个答案:

答案 0 :(得分:2)

有几种方法可以查看实际执行的查询。

第一种方法是从mysql本身启用mysql日志记录。只要您是唯一一个使用服务器的人,它就足够了。

第二种方法是编辑蛋糕安装中的dbo_ *文件,并添加几行以将查询记录到文件中。这可以通过打开dbo_mysql.php文件来完成。它位于:

  

饼/库/模型/数据源/ DBO / dbo_mysql.php

找到_execute($ sql)函数。你所要做的就是添加一行或3个php代码,将$ sql输出到queries.log文件。

然后要查看正在运行的实时查询,打开终端并运行tail -f queries.log(使用mac或linux)。

这是查看运行查询的好方法,也是优化代码的好方法。此外,如果你很好奇,只需浏览dbo_ *文件,看看与mysql相比如何执行oracle等。

答案 1 :(得分:1)

表单mysql

cake使用限制和偏移进行查找。所以它只会得到你在'限制'中的内容。默认是20

第一页将是限制20,0然后是20,20然后是20,40或类似的东西。

对于oracle,我不确定。它会有类似的东西。

答案 2 :(得分:0)

到目前为止,我找到的最佳解决方案是:CakePHP - get last query run

它可以使用app_model.php直接构建到框架中,只需调用它即可访问任何模型。