Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Foreach已更改行_Php_Mysql_Sql_Foreach - Fatal编程技术网

Php Foreach已更改行

Php Foreach已更改行,php,mysql,sql,foreach,Php,Mysql,Sql,Foreach,我正试图操纵我的MySQL结果来创建一个XML文件。这个问题与该任务的后一部分无关,而是与前一部分有关:在PHP中操作SQL查询结果 我想创建一个foreach语句,它将结果分组到它们共享的列值('group_id')。(我可能有三行具有相同的列值,五行具有另一列值。) 我想象在另一个foreach结构中有一个foreach结构。父列应根据共享列值(“组id”)循环结果,第二列应根据另一列(“消息内容”)循环结果 这是我的数据建议(实际数据,此处:): 这是我的PHP代码的建议。(请记住,我正在

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

我想创建一个foreach语句,它将结果分组到它们共享的列值('group_id')。(我可能有三行具有相同的列值,五行具有另一列值。)

我想象在另一个foreach结构中有一个foreach结构。父列应根据共享列值(“组id”)循环结果,第二列应根据另一列(“消息内容”)循环结果

这是我的数据建议(实际数据,此处:):

这是我的PHP代码的建议。(请记住,我正在尝试基于数据构造一个XML文件。)

foreach($results['group\u id']作为$group)
{
// 
foreach($results['message\u id']作为$message)
{
// 
// 
}       
// 
}

如果在SQL查询中使用
ORDER BY
子句按
组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>';
}
$groupId=null;
foreach($results as$message){
如果($message['group\u id']!==$groupId){
如果(!为null($groupId)){
回声';
}
回声“;
$groupId=$message['group_id'];
}
回显“{$message['message_content']}”;
}
如果(!为null($groupId)){
回声';
}

与在PHP中执行此操作不同,您应该让数据库通过正确格式的查询获取所需的数据,从而完成繁重的工作。你能展示一下桌子的结构或者设置一个桌子吗?你的建议行不通。您在两个循环中查看相同的数据结构,并将生成一个大小为
n^2
的输出。听起来您的SQL需要一个
ORDER BY
子句。我在这里包括了我的表结构和我使用的查询:我刚刚考虑过结果需要按“last_message_date”排序,但仍然可以作为组返回@Jayblanchard这对我有用,谢谢。最终回音是否会在屏幕内显示多个回音?目前,只显示了一行。呃,不确定您的确切意思,但刚刚再次查看了此答案,我意识到没有最后的结束标记,我将更新我的答案以解决此问题。这就是你的意思吗?如果不发布预期输出的代码块,很难解释,但是在每个
标记中,可能有多个
标记。此时,仅显示一个
标记。我不认为这是因为我的SQL语句,因为我在其他地方执行了SQL语句来查看结果。第一个foreach标记按预期工作(对于组),但只回显一条
消息。。这很奇怪,看看这段代码,我想不出你怎么会有这种行为。查看您提供的SQL FIDLE,我注意到没有
group\u id
字段,推测这实际上是
对话id
。您是否已确保在代码引用的两个位置更改该字段
group\u id
?(第3行的比较和第8行的赋值)我发现是我的SQL语句导致只显示了一个子项。谢谢你的帮助。
foreach ($results['group_id'] AS $group)
{
   // <group_name>

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

      // <message_content>
   }       

   // </group_name>
}
$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>';
}