【发布时间】:2013-02-06 12:18:36
【问题描述】:
我正在尝试从 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 进行查询,如果我对“表”进行查询,它也可以。
【问题讨论】:
标签: php sql oracle zend-framework