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 に対してクエリを実行しています。「テーブル」に対してクエリを実行すると、それも機能します。