Заменить операторы SQL в XML результатами запроса - PullRequest
0 голосов
/ 20 июля 2009

У меня есть функции, которые преобразуют результаты SQL-запросов в XML. Однако теперь я хочу иметь возможность с помощью PHP читать XML-документ (в котором есть вложенные операторы SQL), выполнять эти операторы и по существу заменять оператор 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-документа с результатами? Какие-либо предложения? Спасибо ...

Кроме того, эти запросы коррелируют в том смысле, что подзапросы (или запросы более высокого уровня) зависят от запросов более низкого уровня ...

Ответы [ 2 ]

1 голос
/ 09 августа 2009

Возможно, это не то, что вы ищете, но я предлагаю не включать SQL в XML, если вы можете избежать этого. Если ваше приложение растет, вы можете захотеть использовать что-то еще для хранения данных (memcache?), И тогда вам придется написать переводчик SQL -> (что-то еще).

Итак, что-то вроде:

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

Затем в вашем PHP вы можете анализировать XML с помощью методов DOM. Когда вы сталкиваетесь с тегом клиента, вы устанавливаете «текущий идентификатор клиента», удаляете тег подчиненной выборки, выполняете любой запрос, добавляете теги, содержащие результаты, и затем переходите по дереву к следующим тегам.

Когда вы нажимаете на тег извлечения внутри тега po, вы можете получить данные PO текущего клиента, повторяя описанную выше процедуру (удаление, запрос, добавление тегов).

Выходные данные будут содержать идентификатор клиента в том же формате, что и входные данные, что упрощает сопоставление выходных данных и входных данных.

0 голосов
/ 20 июля 2009

Ваш вопрос: было бы приемлемо с точки зрения производительности воссоздать другую структуру XML? Если это так, мой ответ: вы не можете знать, пока не попробуешь.

Вы сказали, что у вас уже есть функция для создания XML для 1 запроса. Теперь вы можете написать функцию поверх этого: взять (скопировать?) XML, который вы прочитали из SQL-Query-XML, и вставить, что-то вроде «встраивания» XML, полученного из функции SQL_TO_QUERY () - (заменяя запрос?).

Если вам нужно больше подробностей, пожалуйста, дайте больше подробностей: какие PHP-функции вы используете для манипулирования XML, SimpleXML? Насколько велика база-XML-файл? Почему вы не можете сделать общее заявление для всех клиентов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...