在CakePHP 1.2中显示Oracle分页查询

问题描述:

在CakePHP中使用分页时,查询如何工作?是否:在CakePHP 1.2中显示Oracle分页查询

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

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

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

如果它是选项“a”,你知道任何可以将分页转换为选项“b”的自定义吗?我正在与Oracle合作,所以标准的

SELECT * FROM `table` 
LIMIT 60 , 30 

在Oracle中不起作用,就像它在MySQL中一样。但是我可以根据需要轻松地将MySQL示例转换为Oracle。

更新:它似乎正在限制数据,但我看不到查询以确定它是。当我在dbo_source.php中回显结果时,它只返回由分页限制定义的记录数。奇怪的是,它不会显示用于分页记录的实际查询。它可能是他们在查询之前通过的oracle设置吗?

到目前为止,我已经找到了最好的解决办法是这样的:CakePHP - get last query run

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

form mysql

蛋糕做了限制和偏移量的查找。所以它只会得到你放入'限制'的东西。默认是类似的20

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

对于甲骨文,我不敢肯定。这将是类似的事情。

+0

你知道如何在调试中显示查询,所以我可以证实这一点?我看到的唯一查询是SELECT * FROM ...,它表明它正在拉取所有记录。 – 2011-03-25 00:46:01

+0

蛋糕不做选择*从默认情况下,粘贴一些代码 – dogmatic69 2011-03-25 01:30:48

+0

你是对的。我只是在简化。它执行SELECT ModelName.Field FROM table ModelName WHERE 1 = 1.但是我没有看到限制的添加位置。这是导致我怀疑它是在选择所有记录还是在查询期间真正限制数据的部分。 – 2011-03-25 01:46:54

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

第一种方法是打开mysql本身的日志记录。只要你是唯一使用服务器的应用程序,它应该是完全足够的。

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

蛋糕/库/模型/数据源/ DBO/dbo_mysql.php

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

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

这是查看运行哪些查询以及优化代码的好方法的好方法。此外,如果你很好奇,只是通过dbo_浏览*文件,了解Oracle是如何比较MySQL的执行等

+0

感谢您的建议。我会看看这个。我非常喜欢DBO的想法,因为它会在服务器上执行原始查询时提供原始查询。这将非常有帮助!谢谢! – 2011-03-25 22:05:55

+0

我试图通过在_execute语句之后添加** echo'ORACLE:'。$ sql; **。没有分页限制被执行。它正在运行整个查询。也许这是在v1.3更新的。但是至于1.2,看起来Oracle DBO并不限制查询分页。任何其他想法? – 2011-03-29 16:39:44