Foreach改变了行

时间:2014-05-28 15:04:53

标签: php mysql sql foreach

我正在尝试操纵我的MySQL结果来创建XML文件。这个问题与该任务的后半部分无关,而是前者:在PHP中操纵SQL查询结果。

我想创建一个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>
}

1 个答案:

答案 0 :(得分:2)

如果您在SQL查询中使用ORDER BY子句按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>';
}