0

クラス を使用してmoduleSelectQuery、PHP で SQL クエリを生成しています。

基本的に、このクラスは、テーブル名、選択するフィールド、WHERE 条件など、SQL SELECT クエリの個々のコンポーネントを分割します。

ただし、これはネストされたクエリではすぐに複雑になります。WHERE table1.field1 IN (SELECT table2.field2 from table2 WHERE table2.field3 = criteria)

現在、句を格納するために使用さmoduleSelectQueryれる calledのプロパティがあります。他のプロパティ (つまり) と同様に、これはユーザー入力に基づいて独自の関数によって一緒に解析されます。$inWhereClauseWHERE... IN(SELECT...)$tableName, $whereClause, $havingClause

ただし、この解析機能は基本的に制限されています。プロパティを解析するのに十分な労力を費やしたとしても、$whereClause入れ子になった select ステートメントを追加することはできません。

$inWhereClauseこれを行う1つの方法は、別のmoduleSelectQueryオブジェクトに設定することだと思います。これは、親moduleSelectQueryがそれ自体が であるプロパティを持つことを意味しmoduleSelectQueryます。つまり、再帰オブジェクトになります。これはPHPで可能/良い習慣ですか? 他に欠点はありますか?

4

1 に答える 1

0

これが可能な解決策であることがわかりました。Person クラスがあることを視覚化します。人には子供がいるかもしれませんが、それは人です。理不尽に思えません。

オブジェクトはそれ自体を参照しないため、必ずしもこれを再帰オブジェクトと呼ぶ必要はありませんが、オブジェクトは同じクラスのインスタンスであるプロパティを持つことができます。

WhereステートメントのサブクエリのみがmoduleSelectQueryオブジェクトである必要があるため、単純な比較が文字列または整数のインスタンスになるため、明らかに適切にネストする必要があります。

このアプローチから生じる唯一の欠点は、クラスとメソッドの設計にあります。目立ったパフォーマンスの問題や保守性の問題は見当たりません。

于 2013-05-15T15:49:20.510 に答える