0

我正在使用一个类 ,moduleSelectQuery在 PHP 中生成 SQL 查询。

基本上,这个类分解了 SQL SELECT 查询的各个组成部分,例如表名、要选择的字段、WHERE 条件等。

但是,这很快就会因为嵌套查询变得复杂,例如WHERE table1.field1 IN (SELECT table2.field2 from table2 WHERE table2.field3 = criteria)

目前我有一个用于存储子句的moduleSelectQuery调用属性。与其他属性(即)一样,它由它自己的函数根据用户输入一起解析。$inWhereClauseWHERE... IN(SELECT...)$tableName, $whereClause, $havingClause

但是,这种解析功能从根本上是有限的。即使我在解析$whereClause属性时付出了足够的努力,它也不能有额外的嵌套选择语句。

我认为这样做的一种方法是设置$inWhereClause为另一个moduleSelectQuery对象。这意味着父级moduleSelectQuery将拥有一个本身就是 a 的属性moduleSelectQuery,即它将是一个递归对象。这在 PHP 中是可能的/好的做法吗?还有其他缺点吗?

4

1 回答 1

0

我可以看到这是一个可能的解决方案。想象一下有一个 Person 类。一个人可能有一个孩子,这是一个人。似乎不无道理。

我不一定将其称为递归对象,因为该对象不引用自身,而是对象可以具有作为同一类的实例的属性。

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

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

于 2013-05-15T15:49:20.510 回答