我正在尝试从 Oracle 11g 数据库中选择一些记录。该语句用于为 HTML 表实现某种“过滤”功能。
要求:限制分页和排序过滤结果。
查询是用Zend_Db_Select创建的
*像魅力一样工作: *
$select->where('APPLICATIONS LIKE ?', '%MYAPP1%');
$select->where('APPLICATIONS NOT LIKE ?', '%GENESIS%');
$select->limit(20);
= 1 个匹配结果(没关系!)
当我尝试对过滤结果进行排序时会出现问题:
$select->order('PATH ASC');
= 3 个匹配结果 ??
我认为它与 Zend DB Select 生成的查询有关,它看起来像这样:
SELECT z2.*
FROM (
SELECT z1.*, ROWNUM AS "zend_db_rownum"
FROM (
SELECT "APPS".* FROM "APPS" WHERE (APPLICATIONS LIKE '%MYAPP1%') AND (APPLICATIONS NOT LIKE '%GENESIS%') ORDER BY "PATH" ASC
) z1
) z2
WHERE z2."zend_db_rownum" BETWEEN 1 AND 20
- 如果我在没有订单的情况下运行查询,一切都很好。
- 如果我无限制地运行查询,一切都很好。
- 如果我使用 order + limit -> 错误结果运行查询。
如果我接受声明并将订单放在“BETWEEN 1 AND 20”之后,它就像我想要的那样工作。但是Zend DB Select 怎么改呢?
重要提示:我正在对 Oracle VIEW 进行查询,如果我对“表”进行查询,它也可以。