2009-07-20 66 views
0

我有適當的函數將sql查詢的結果轉換爲XML。但是,我現在希望能夠使用PHP讀取XML文檔(具有嵌套的SQL語句),執行這些語句,並基本上用結果替換sql語句。用查詢結果替換XML中的SQL語句

(剛一說明,使用PostgreSQL)

例如:

<customers> 
    <customer> 
     <info>* from customer for where customer = 1</info> 
      <details> 
      <po> 
       <info>* from po join where customer = "master" customer</info> 
      </po> 
      <order_history> 
       <info>* from order_history where customer = "master" customer</info> 
      </order_history> 
      </details> 
    </customer> 
    <customer> 
     <info>* from customer for where customer = 2</info> 
      <details> 
      <po> 
       <info>* from po join where customer = "master" customer</info> 
      </po> 
      <order_history> 
       <info>* from order_history where customer = "master" customer</info> 
      </order_history> 
      </details> 
    </customer> 
    ... 
</customers> 

我相信在讀取XML文檔中,並與SQL語句查詢數據庫,但我不肯定如何去填充XML結構中的結果。

某種文本替換?或者同時重建一個帶有結果的重複XML文檔?有什麼建議麼?謝謝...

而且,這些查詢都是在這個意義上,子查詢(或更高級別的查詢)取決於下級查詢相關...

回答

1

這可能不是你要找的東西,但我建議不要在XML中包含SQL,如果你可以避免的話。如果你的應用程序增長了,你最終可能會想要使用別的東西來存儲數據(memcache?),然後你必須編寫一個SQL - >(別的)翻譯器。

所以,更多的東西一樣:

<customers> 
    <customer id="1"> 
    <fetch /> 
    <details> 
     <po> 
     <fetch /> 
     </po> 
... 

然後在你的PHP可以解析與DOM方法的XML。當您穿過客戶標籤時,您可以設置「當前客戶ID」,刪除從屬獲取標籤,執行任何您想要的查詢,添加包含結果的標籤,然後沿着樹向下移動到下一個標籤。

當您點擊po標籤中的獲取標籤時,您可以獲取當前客戶的PO數據,重複上述過程(刪除,查詢,添加標籤)。

輸出將包含與輸入相同格式的客戶ID,因此可輕鬆關聯輸出和輸入。

0

是你的問題:它是可以接受的性能 - 重新創建另一個XML結構?如果是這樣,我的回答:直到你嘗試才能知道。

你說過,你已經有了一個函數來爲1個查詢創建XML。現在您可以在其上編寫一個函數:從SQL-Query-XML中讀取(複製?)您所讀取的XML,然後插入一些「嵌入」從SQL_TO_QUERY()函數給出的XML(替換查詢?)。

如果您需要更多詳細信息,請提供更多詳細信息:您使用哪些PHP函數來操作XML,SimpleXML? Database-XML文件有多大?爲什麼你不能爲所有客戶做一般性陳述?