【问题标题】:with Zend\Db\Sql\Select can I manipulate the order that the SQL parts are put together?使用 Zend\Db\Sql\Select 我可以操纵 SQL 部分放在一起的顺序吗?
【发布时间】:2015-09-14 15:51:58
【问题描述】:

我在 Zend\Db 中使用 PDO Firebird。

这很好,直到我想限制返回的记录数。我正在使用此代码;

$select = $this->getSelect()
               ->limit($limit);

哪个产生这个 SQL;

SELECT "MODELS".* FROM "MODELS" limit '10'

然而firebird需要这样的SQL;

SELECT first 10 "MODELS".* FROM "MODELS"

我可以用这个语句把'limit'这个词改成'first';

$select->setSpecification('limit', 'first %1$s');

但我不知道如何将限制(第一个)子句放在 SQL 的开头而不是结尾。

我在 Zend\Db\Sql\Select 中找不到将 SQL 部分放在一起的代码。

【问题讨论】:

  • 如果不实现自己的 Select 语句,我认为您无法做到这一点。

标签: sql pdo zend-framework2 firebird


【解决方案1】:

实际上,从 2.0 版开始,Firebird supports ROWS clause 在语句的末尾。所以我想你需要使用类似的东西

$select->setSpecification('limit', 'ROWS %1$s');

但我不熟悉setSpecification 语法,因此您可能需要更改格式字符串。

【讨论】:

  • 这很有趣,几乎解决了问题。不过,这个概念略有不同。例如LIMIT 10 OFFSET 20 等于 FIRST 10 SKIP 20。但是对于行,我认为它等于 ROWS 20 到 30。因此需要在驱动程序实现中操纵这些数字。但仍然非常有趣。
  • @srayner Firebird 3.0 将引入更多的 SQL 标准OFFSET / FETCH
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 2019-09-04
  • 2018-08-07
  • 2016-01-06
  • 1970-01-01
相关资源
最近更新 更多