2009-07-20 13 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文でDBに問い合わせることで確信していますXML構造で結果を取り込む方法。

何らかのテキストの置換?または、同時に結果の重複したXML文書を再構築しますか?助言がありますか?

また、これらのクエリは、サブクエリ(またはより高いレベルのクエリ)は、下位レベルのクエリに依存するという意味で相関しているおかげで... ...

答えて

1

これはあなたが探しているものではないかもしれませんが、避けることができればXMLにSQLを含めないことをお勧めします。アプリケーションが大きくなったら、データを格納するために何か他のもの(memcache?)を使いたいと思うかもしれませんし、SQL - >(何か他のもの)翻訳者を書く必要があります。

ので、より多くのような何か:

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

は、その後、あなたのPHPであなたがDOMメソッドでXMLを解析することができます。顧客タグを横断して「現在の顧客ID」を設定し、従属フェッチ・タグを削除し、必要な問合せを実行し、結果を含むタグを追加し、ツリーの下の次のタグに移動します。

poタグ内のfetchタグをヒットすると、上記のプロセス(タグの削除、クエリ、タグの追加)を繰り返して、現在の顧客のPOデータを取得できます。

出力には入力と同じ形式の顧客IDが含まれているため、出力と入力の関連付けが容易になります。

0

は、あなたの質問です:それは許容できるパフォーマンスだろう他のXML構造を再作成するには?もしそうなら、私の答え:試してみるまで知ることはできません。

あなたには、すでに1つのクエリに対してXMLを作成する機能があります。 SQL-Query-XMLから読み込んだXMLを取り込み(コピー?)、SQL_TO_QUERY()関数から与えられたXMLを挿入して並べ替えることができます。クエリ?)。

さらに詳しい情報が必要な場合は、どのPHP関数を使用してXML、SimpleXMLを操作していますか? Database-XML-Fileの大きさはどれくらいですか?なぜあなたはすべての顧客に対して一般的な声明をしてくれませんか?

関連する問題