从MySQL查询中“分组”PHP结果

时间:2016-05-29 16:27:21

标签: php mysql pdo grouping

我很难实现这个,所以我想问一下......

我有一个包含一些字段名称的表。表中的每个字段条目都有一个类型,名称和ID,符合规范。

我希望能够对SQL结果进行分组,以便我可以将每种类型(以及类型的关联成员)“打印”到表中。我尝试了以下方法:

$query = "SELECT id,type,opt_name FROM fields ORDER BY type";  
$resource = $pdo->query($query);
$results = array();
while ( $row = $resource->fetch() ) {   
$type[$row['type']] = $row['opt_name'];
$o_id = clean($row['id'], 'text');
$o_name = clean($row['opt_name'], 'text');
}

foreach ($type AS $o_type => $o_name) {
    echo $o_type;
    echo "<br>";

    foreach (($type) AS $opt_name) { 
        echo $opt_name;
        echo "<br>";
         }
 }

请尽量不要过于担心HTML输出,这只是为了展示上下文。

执行代码时,它只会打印一行。结果,我对'print_r'进行了测试:

$type[$row['type']] = $row['opt_name'];

确实只在数组中显示了一行。创建:

$results = $row;

显示所有数据,但过多,而不是我认为可以与'foreach'一起使用。

我可能在这里犯了一个新手的错误,但看不到它。

帮助!

1 个答案:

答案 0 :(得分:1)

您将覆盖$ type ['type']的值,而不是使用以下内容将更多值推送到其上:

$type[$row['type']] = $row['opt_name'];

你很可能想要

$type[$row['type']][] = $row['opt_name'];

然后你需要修复你的循环,这样你就可以遍历选项而不是两次类型。

foreach ($type AS $o_type => $options) {
    echo $o_type;
    echo "<br>";

    foreach ($options AS $opt_name) { 
        echo $opt_name;
        echo "<br>";
    }
}