在 CakePHP 1.2 中显示 Oracle 分页查询

发布于 2024-10-26 06:39:55 字数 477 浏览 2 评论 0原文

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

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

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

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

如果是选项“a”,您是否知道任何可将分页转换为选项“b”的自定义设置?我正在使用 Oracle,因此该标准

SELECT * FROM `table`
LIMIT 60 , 30

在 Oracle 中的工作方式与在 MySQL 中的工作方式不同。但我可以根据需要轻松地将 MySQL 示例转换为 Oracle。

更新:它似乎正确地限制了数据,但我无法看到查询来确定它是。当我回显 dbo_source.php 中的结果时,它仅返回分页限制定义的记录数。奇怪的是它不会显示用于对记录分页的实际查询。这可能是他们在查询之前传递的预言机设置吗?

When using pagination in CakePHP, how does the queries work? Does it:

a) Query the entire record set and only display the records specified by the pagination settings?

b) Query only a subset of the records based on the pagination settings?

I want to avoid the query on millions of records if it doesn't use option "b". I have been searching the web for hours and I cannot find anything.

If it is option "a", do you know of any customizations that would convert pagination to option "b"? I am working with Oracle, so the standard

SELECT * FROM `table`
LIMIT 60 , 30

doesn't work in Oracle like it does in MySQL. But I can easily convert a MySQL sample to Oracle as needed.

UPDATE: It appears to be limiting the data correctly, but I cannot see the query to know for sure that it is. When I echo out the results in the dbo_source.php, it only returns the number of records as defined by the pagination limit. Strange that it will not show the actually query used to paginate the records. Could it be an oracle setting they pass before the query is made?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

难忘№最初的完美 2024-11-02 06:39:55

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

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

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

cake/libs/model/datasources/dbo/dbo_mysql.php

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

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

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

There are several ways to see what queries are actually being executed.

The first way is to turn on mysql logging from mysql itself. As long as you are the only one using the server it should be perfectly sufficient.

The second way is to edit the dbo_* file in your cake installation and add a few lines to log the queries to a file. This can be done by opening your dbo_mysql.php file. It is located:

cake/libs/model/datasources/dbo/dbo_mysql.php

Find the _execute($sql) function. All you do is add a line or 3 of php code to output the $sql to a queries.log file.

Then to see your live queries running, open a terminal and run tail -f queries.log (using a mac or linux).

This is a great way to see what queries run and a great way to optimize your code. Also if you're curious, just browse through the dbo_* files to see how oracle is executed compared to mysql, etc.

依 靠 2024-11-02 06:39:55

形式 mysql

cake 做了一个带有限制和偏移量的查找。所以它只会得到你在“限制”中输入的内容。默认值类似于 20

第一页将限制为 20、0 然后 20、20 然后 20、40 或类似的内容。

对于甲骨文,我不确定。但它会是类似的东西。

form mysql

cake does a find with limit and offset. so it will only get what you put in 'limit'. default is something like 20

first page would be limit 20, 0 then 20, 20 then 20, 40 or something like that.

for oracle, im not to sure. it will be something similar though.

伏妖词 2024-11-02 06:39:55

到目前为止,我找到的最好的解决方案是: CakePHP - 获取最后一次查询运行

可以使用 app_model.php 直接构建到框架中,并通过简单地调用它来提供对任何模型的访问。

The best solution I have found so far is this: CakePHP - get last query run

It can be built right into the framework using app_model.php and provides access to any model by simply calling it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文