在CakePHP中使用分页时,查询如何工作?是吗:
a)查询整个记录集,只显示分页设置指定的记录?
b)根据分页设置仅查询记录的子集?
如果不使用选项“b”,我想避免对数百万条记录进行查询。我一直在网上搜索几个小时,我找不到任何东西。
如果是选项“a”,您知道任何将分页转换为选项“b”的自定义吗?我正在使用Oracle,所以标准
SELECT * FROM `table`
LIMIT 60 , 30
在Oracle中不像在MySQL中那样起作用。但我可以根据需要轻松地将MySQL样本转换为Oracle。
更新:它似乎正确地限制了数据,但我无法确定查询是否确实存在。当我在dbo_source.php中回显结果时,它只返回由分页限制定义的记录数。奇怪的是,它不会显示用于对记录进行分页的实际查询。它可能是在查询之前传递的oracle设置吗?
答案 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直接构建到框架中,只需调用它即可访问任何模型。