Sabi
Новичок
Помогите пожалуйста, где я ошибся ? В базе хранятся связанные (по id) две таблицы, надо их извлечь в виде xml файл? В моем случае все дочерние элементы входят под первый элемент, а не как надо. Результат должен быть в виде:
<records>
<record 1>
<kod>1</kod>
<name>nnnn</name>
<type> 2324 </type>
<relation>
<kods>11</kods>
<name>ыпывыпып</name>
<type>d</type>
</relation>
.. до конца дочернего элемента элемента 1
<relation>
<kods>99</kods>
<name>sdgsdgsdd</name>
<type>d</type>
</relation>
</record>
<record 2 >(11 элемент имеет дочерние элементы в таблице 2,)
<kod>11</kod>
<name>dfghhj</name>
<relation>
<kods>1111</kods>
<name>ыпывыпып</name>
<type>d</type>
</relation>
.. до конца дочернего элемента под элемента 11
<relation>
<kods>9999</kods>
<name>sdgsdgsdd</name>
<type>d</type>
</relation>
</record>
</records>
все -record-ы хранятся в первой таблице;
все -relation-ы хранятся во второй таблице;
Теперь проблема в том, что я должна сравнивать все элементы таблицы по id. Я сделала, но кажется здесь у меня ошибка, подскажите пожалуйста:
$query = 'SELECT kod,name FROM tab1 WHERE tab1.id=tab2.id ORDER BY tab1.id ';
$result = pg_query($query) or die('Ошибка запроса: ' . pg_last_error());
$query1 = "SELECT tab2.kods, tab1.name, tab2.type FROM tab2 JOIN tab1 ON tab1.kod=tab2.kods ORDER BY tab2.ide ";
$result1 = pg_query($query1) or die ("Error in query1: $query1. " .
pg_last_error());
header("Content-type: text/xml; charset= UTF-8");
$doc = new DOMDocument("1.0");
// add root node
$root = $doc->createElement("records");
$node = $doc->appendChild($root);
while ($row = pg_fetch_assoc($result)){
$out=$doc->createElement('record');
$out=$root->appendChild($out);
foreach ($row as $fieldname => $fieldvalue)
{
$child = $doc->createElement($fieldname);
$child = $out->appendChild($child);
$value = $doc->createTextNode($fieldvalue);
$value = $child->appendChild($value);
}
while ($row = pg_fetch_assoc($result1)){
$inner = $doc->createElement('relation');
$inner = $out->appendChild($inner);
foreach ($row as $fieldname => $fieldvalue) {
$child = $doc->createElement($fieldname);
$child = $inner->appendChild($child);
$value = $doc->createTextNode($fieldvalue);
$value = $child->appendChild($value);
}
}}
<records>
<record 1>
<kod>1</kod>
<name>nnnn</name>
<type> 2324 </type>
<relation>
<kods>11</kods>
<name>ыпывыпып</name>
<type>d</type>
</relation>
.. до конца дочернего элемента элемента 1
<relation>
<kods>99</kods>
<name>sdgsdgsdd</name>
<type>d</type>
</relation>
</record>
<record 2 >(11 элемент имеет дочерние элементы в таблице 2,)
<kod>11</kod>
<name>dfghhj</name>
<relation>
<kods>1111</kods>
<name>ыпывыпып</name>
<type>d</type>
</relation>
.. до конца дочернего элемента под элемента 11
<relation>
<kods>9999</kods>
<name>sdgsdgsdd</name>
<type>d</type>
</relation>
</record>
</records>
все -record-ы хранятся в первой таблице;
все -relation-ы хранятся во второй таблице;
Теперь проблема в том, что я должна сравнивать все элементы таблицы по id. Я сделала, но кажется здесь у меня ошибка, подскажите пожалуйста:
$query = 'SELECT kod,name FROM tab1 WHERE tab1.id=tab2.id ORDER BY tab1.id ';
$result = pg_query($query) or die('Ошибка запроса: ' . pg_last_error());
$query1 = "SELECT tab2.kods, tab1.name, tab2.type FROM tab2 JOIN tab1 ON tab1.kod=tab2.kods ORDER BY tab2.ide ";
$result1 = pg_query($query1) or die ("Error in query1: $query1. " .
pg_last_error());
header("Content-type: text/xml; charset= UTF-8");
$doc = new DOMDocument("1.0");
// add root node
$root = $doc->createElement("records");
$node = $doc->appendChild($root);
while ($row = pg_fetch_assoc($result)){
$out=$doc->createElement('record');
$out=$root->appendChild($out);
foreach ($row as $fieldname => $fieldvalue)
{
$child = $doc->createElement($fieldname);
$child = $out->appendChild($child);
$value = $doc->createTextNode($fieldvalue);
$value = $child->appendChild($value);
}
while ($row = pg_fetch_assoc($result1)){
$inner = $doc->createElement('relation');
$inner = $out->appendChild($inner);
foreach ($row as $fieldname => $fieldvalue) {
$child = $doc->createElement($fieldname);
$child = $inner->appendChild($child);
$value = $doc->createTextNode($fieldvalue);
$value = $child->appendChild($value);
}
}}