Во-первых, я знаю, что название носит общий характер и не подходит.Я просто не мог придумать заголовок, который мог бы описать мою проблему.
У меня есть таблица Получатели в MySQL, структурированная так:
id | email | status
1 foo@bar S
2 bar@baz S
3 abc@def R
4 sta@cko B
Мне нужно преобразовать данные в следующееXML, в зависимости от поля status .Например:
<Recipients>
<RecipientsSent>
<!-- Have the 'S' status -->
<recipient>foo@bar</recipient>
<recipient>bar@baz</recipient>
</RecipientsSent>
<RecipientsRegexError>
<recipient>abc@def</recipient>
</RecipientsRegexError>
<RecipientsBlocked>
<recipient>sta@cko</recipient>
</RecipientsBlocked>
</Recipients>
У меня есть этот PHP-код, чтобы реализовать это ($ получатели содержат ассоциативный массив таблицы БД):
<Recipients>
<RecipientsSent>
<?php
foreach ($recipients as $recipient):
if ($recipient['status'] == 'S'):
echo "<recipient>" . $recipient['email'] . "</recipient>";
endif;
endforeach;
?>
</RecipientsSent>
<RecipientsRegexError>
<?php
foreach ($recipients as $recipient):
if ($recipient['status'] == 'R'):
echo "<recipient>" . $recipient['email'] . "</recipient>";
endif;
endforeach;
?>
</RecipientsRegexError>
<?php /** same loop for the B status */ ?>
</Recipients>
Итак, это означает, что если у меня есть1000 записей в таблице и 4 различных состояния », которые можно проверить, это означает, что будет 4 цикла, каждый из которых будет выполняться 1000 раз.
Как это можно сделать более эффективным способом?Я думал о получении четырех разных наборов из базы данных, то есть 4 разных запросов, будет ли это более эффективным?Я думаю, что это можно сделать с помощью одного цикла, но я не могу найти решение.
В любом случае это можно сделать только с одним циклом?