Foreach изменил строку

Я пытаюсь манипулировать результатами MySQL для создания XML-файла. Этот вопрос не связан с последней частью этой задачи, но первый: манипулирование SQL-запросом приводит к PHP.

Я хочу создать оператор foreach, который будет группировать результаты в значение столбца, которое они разделяют ('group_id'). (У меня могут быть три строки с одинаковым значением столбца и пять строк с другим значением столбца).

Я предполагаю, что одна конструкция foreach внутри другой. Родитель должен прокручивать результаты по значению общего столбца ('group_id'), а второй должен зацикливаться на основе другого столбца ('message_content').

Это предложение моих данных (фактические данные, здесь: http://sqlfiddle.com/#!2/4ce52/1 ):

message_id | group_id | message_content | group_name 1 | 1 | ........ | ........ 2 | 1 | ....... | ....... 3 | 1 | ...... | ...... 4 | 2 | ..... | ..... 5 | 2 | .... | .... 6 | 3 | ... | ... 7 | 4 | .. | .. 8 | 4 | . | . 

Это предложение моего PHP-кода. (Помните, я пытаюсь построить XML-файл на основе данных.)

 foreach ($results['group_id'] AS $group) { // <group_name> foreach ($results['message_id'] AS $message) { // <message_content> // <message_content> } // </group_name> } 

Если вы используете предложение ORDER BY в SQL-запросе для заказа group_id , то что-то подобное должно достичь того, чего вы хотите;

 $groupId = null; foreach ($results as $message) { if ($message['group_id'] !== $groupId) { if (!is_null($groupId)) { echo '</group>'; } echo "<group id=\"{$message['group_id']}\">"; $groupId = $message['group_id']; } echo "<message id=\"{$message['message_id']}\">{$message['message_content']}</message>"; } if (!is_null($groupId)) { echo '</group>'; }