我正在使用类moduleSelectQuery
来生成PHP中的SQL查询。
基本上,这个类会分解SQL SELECT查询的各个组件,例如表名,要选择的字段,WHERE条件等。
但是,嵌套查询(例如WHERE table1.field1 IN (SELECT table2.field2 from table2 WHERE table2.field3 = criteria)
目前,我有一个名为moduleSelectQuery
的{{1}}属性,用于存储$inWhereClause
子句。与其他属性(即WHERE... IN(SELECT...)
)一样,它可以根据用户输入通过自己的函数一起解析。
但是,这种解析功能基本上是有限的。即使我在解析$tableName, $whereClause, $havingClause
属性时投入了足够的精力,它也不能有其他嵌套的select语句。
我认为一种方法是将$whereClause
设置为另一个$inWhereClause
对象。这意味着父moduleSelectQuery
将拥有一个本身为moduleSelectQuery
的属性,即它将是一个递归对象。这是PHP的可行/良好实践吗?还有其他缺点吗?
答案 0 :(得分:0)
我可以看到这是一个可能的解决方案。可视化具有Person类。一个人可能有一个孩子,这是一个人。似乎并不合理。
我不一定将此称为递归对象,因为对象不引用自身,而是对象可以具有属性,该属性是同一个类的实例。
显然需要适当地嵌套,因为Where语句中的子查询只需要是moduleSelectQuery对象,其中简单的比较将是字符串或整数的实例。
这种方法可以带来的唯一缺点是在类和方法的设计中。我没有看到任何明显的性能问题或可维护性问题。