我正在尝试操纵我的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>
}
答案 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>';
}