2013-05-15 63 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對象,其中簡單比較將是字符串或整數的實例。

從這種方法可以得到的唯一缺點是在類的設計和方法。我沒有看到任何明顯的性能問題或可維護性問題。