【问题标题】:Showing Oracle Pagination Queries in CakePHP 1.2在 CakePHP 1.2 中显示 Oracle 分页查询
【发布时间】:2011-03-25 00:12:26
【问题描述】:

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

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

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

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

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

SELECT * FROM `table`
LIMIT 60 , 30

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

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

【问题讨论】:

    标签: mysql oracle pagination cakephp-1.2


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 感谢您的建议。我会看看这个。我真的很喜欢 DBO 的想法,因为它会在服务器上执行原始查询时提供原始查询。这将非常有帮助!谢谢!
    • 我尝试在 _execute 语句之后添加 echo 'ORACLE: '.$sql;。没有执行分页限制。它正在运行整个查询。也许这是在 v1.3 中更新的。但是对于 1.2,Oracle DBO 似乎不限制分页查询。还有其他想法吗?
    【解决方案2】:

    形成mysql

    cake 使用限制和偏移进行查找。所以它只会得到你放在“限制”中的东西。默认值类似于 20

    首页将限制为 20、0 然后 20、20 然后 20、40 或类似的东西。

    对于甲骨文,我不确定。不过会是类似的。

    【讨论】:

    • 您知道如何在调试中显示查询以便我确认吗?我看到的唯一查询是 SELECT * FROM ... 这表明它正在提取所有记录。
    • 你是对的。我只是在简化。它执行 SELECT ModelName.Field FROM table ModelName WHERE 1 = 1。但我没有看到添加限制的位置。这是让我想知道它是选择所有记录还是在查询期间真正限制数据的部分。
    • 粘贴文件中的实际代码和 SQL 日志内容中的实际 SQL 输出,我不相信你
    • 如果您执行$this->Model->find('all'),您将获得您描述的查询。如果你使用$this->paginate() cakePHP 将使用限制。将调试设置为 2 并查看生成的查询以确认
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多