2013-05-15 36 views
0

我正在使用类moduleSelectQuery在PHP中生成SQL查询。在php中使用递归属性的对象

基本上,这个类打破了一个SQL SELECT查询的各个组件,如表名,字段选择,在WHERE条件等

不过,这很快就变得复杂嵌套查询,如WHERE table1.field1 IN (SELECT table2.field2 from table2 WHERE table2.field3 = criteria)

目前我有一个moduleSelectQuery叫做$inWhereClause属性,用于存储WHERE... IN(SELECT...)子句。像其他属性(即$tableName, $whereClause, $havingClause)一样,这可以通过基于用户输入的自身功能一起解析。

但是,这个解析函数从根本上是有限的。即使我花了足够的精力去解析$whereClause属性,它也不能有额外的嵌套选择语句。

我认为这样做的一种方法是将$inWhereClause设置为另一个moduleSelectQuery对象。这意味着母公司moduleSelectQuery将具有本身是moduleSelectQuery的财产,即它将是递归对象。这是可能的/良好的做法在PHP?还有其他缺点吗?

+0

父母的延伸子对象?也许改变它,所以你有一个objcet创建一个select语句作为父对象的子元素,它创建了“final”语句,所以你可以多次调用子元素来创建主选择和子选择,然后它们被合并回到主要对象中。也许声明模板可以与某种形式的工厂一起使用来构建查询。我只是在吹嘘c的想法。 – Dave

回答

0

我可以看到这是一个可能的解决方案。可视化拥有Person类。一个人可能有一个孩子,这是一个人。似乎不合理。

我不一定会称之为递归对象,因为对象不会引用它自己,而是对象可以拥有属于同一类的实例的属性。

它显然需要适当嵌套,因为Where语句中只有子查询需要是moduleSelectQuery对象,其中简单比较将是字符串或整数的实例。

从这种方法可以得到的唯一缺点是在类的设计和方法。我没有看到任何明显的性能问题或可维护性问题。