Я только начал изучать PHP и XML, так что несите меня! Мне нужно создать динамический XML файл из базы данных MYSQL с использованием PHP-скрипта.
Я хочу, чтобы мой вывод выглядел так:
<Post>
<Title>
<Tags>
<Tag>
<Tag>
<Tag>
<Date>
etc.
</Post>
<Post>
</Post>
Теперь я успешно сделал запрос и использовал его в While-Loop. Но у меня есть второй запрос, который нужно реализовать. Первый запрос обрабатывает все теги, такие как Title, Date и все остальные теги, которые находятся на одном уровне. Но для тегов мне нужны субтитры, для которых требуется второй запрос.
Теперь, как мне создать вложенный цикл while, который вставляет данные в теги? Проблема состоит в том, что каждая почта имеет несколько тегов (или только одну), и я не знаю, как возможно, чтобы скрипт php "входил" в теги, вставлял тег-элементы, определенные вторым запросом, а затем возвращался на один уровень и продолжает выполнение первого запроса (будет здесь Date).
Может быть, мне не нужен второй цикл, я не знаю!
Нет проблем с вложением в петлях, кроме возможных проблем с производительностью, которые возникают с большими наборами данных (потому что если вы правильно поняли, у вас есть запрос для <tags>
для каждого <post>
).
Просто так гнезди свои циклы (если вы отправляете запрос для каждого тега):
<?php
$result = $mysqli -> query("SELECT * FROM posts");
$xmlBody = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xmlBody .= "<XML>";
while($post = $result -> fetch_array()) {
$xmlBody .= "<post>";
$xmlBody .= "<title>" . $post['title'] . "</title>";
// ....
$xmlBody .= "<tags>";
$tags_result = $mysqli -> query("
SELECT *
FROM tags
WHERE id='" . $post['id'] . "'
");
while($tag = $tags_result -> fetch_array()) {
$xmlBody .= "<tag>" . $tag['tag'] . "</tag>";
}
$xmlBody .= "</tags>";
// More Info (for example date)....
$xmlBody .= "</post>";
}
Это написано полностью слепо, но я надеюсь, что это иллюстрирует то, что вы хотите достичь довольно хорошо. Вместо этого вы, вероятно, должны изучить использование предварительно написанного API для XML, например SimpleXML. Кроме того, возможно, это возможно сделать в одном запросе MySQL с использованием JOIN.
@hakre Вот что я подумал, я просто приводил пример того, что он описал. Я бы прокомментировал, что пример был бы полезен, если бы я мог (недостаточно репутации).
Обновить:
Я обновил приведенный выше пример кода. Извините за ошибку, которую я сделал в использовании этого синтаксиса: $post → title
. Это применимо только в том случае, если $post
был объектом, а это не так.
Для пояснения я использовал объектно-ориентированный синтаксис в MySQL-запросах и выборках. См. Это для справки.