PHP SQL循环结果基于字段

时间:2012-03-29 15:37:32

标签: php sql loops

我正在创建一个动态记录集,其中我将一些值填充到用于选择所有着墨记录的查询中。

接下来我需要循环并对结果进行分组,但我不确定如何按查询中使用的值进行分组。

参考查询:

SELECT fldItem, fldDescription, fldRank,fldType FROM tableName
WHERE fldType IN (33, 34, 36) ORDER BY fldRank

值33,34和36将动态传递给查询。 我的目标是然后有一个循环/重复区域,允许在组中显示所有结果共享相同的fldType

结果应如下所示:

item1, description1, rank1, type33
item2, description2, rank2, type33
item3, description3, rank5, type33
item4, description4, rank6, type33
item5, description5, rank8, type33

--------

item6, descriptionv, rank1, type34
item7, descriptionw, rank2, type34
item8, descriptionx, rank3, type34
item9, descriptiony, rank4, type34
item10, descriptionz, rank5, type34

--------

item11, descriptionA, rank2, type36
item12, descriptionB, rank3, type36

使用do / while循环会显示要显示的所有项目,但不显示任何分组。 ForEach循环是解决方案吗?

2 个答案:

答案 0 :(得分:3)

如果您正在讨论报表输出中的可视分组,那么您需要为每次循环迭代跟踪该值,然后在检测到更改时发出视觉中断。像这样:

$last_type = null;
foreach ($records as $record) {
    if ($last_type !== null && $last_type != $record->fldType) {
        echo '<whatever your visual cue is>';
        $last_type = $record->fldType;
    }
}

另外,请确保:

ORDER BY fldType, fldRank

答案 1 :(得分:1)

SELECT fldItem, fldDescription, fldRank,fldType FROM tableName
WHERE fldType IN (33, 34, 36) ORDER BY fldType, fldRank

这将首先按fldType分组,然后按fldRank分组。在PHP代码中,只需记住最后一个fldType,并在它发生更改时添加新组。所有fldTypes现在都将组合在一起,因此您可以按顺序遍历结果。