基于字段的PHP SQL循环结果

问题描述:

我正在创建一个动态记录集,其中我将一些值填充到用于选择所有签名记录的查询中。基于字段的PHP SQL循环结果

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

参考查询:

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循环是解决方案吗?

+0

您是否尝试过用GROUP BY不同的SQL语句?那会以小组形式返回结果。然后你可以使用一个循环,当Type改变时,让它放弃一个换行符,或者任何你想区分不同类型的东西。 – kevingreen 2012-03-29 15:41:05

+1

GROUP BY不会*以组的形式返回结果,它将为组返回单个结果。也就是说,在这里使用GROUP BY会导致返回三行。 – 2012-03-29 15:52:21

+0

是的最初我试图GROUP BY,但发现它不起作用时使用选择IN() – Burndog 2012-03-29 15:56:20

如果您在报告输出中讨论可视化分组,那么您需要跟踪每个循环迭代的值,然后在检测到更改时发出视觉中断。事情是这样的:

$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 
+0

是的,我相信这是我正在寻找的。谢谢! – Burndog 2012-03-29 16:06:32

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

这将首先按fldType进行分组,然后按fldRank进行分组。在您的PHP代码中,只需记住最后一个fldType,并在其更改时添加一个新组。现在所有的fldTypes将被组合在一起,所以你可以按顺序循环遍历结果。

+0

是的,这将返回上面引用的方式的结果,但我试图让组如“---- ----“休息。在实际情况下,这是因为结果(每个组)要设置为格式化表格。 – Burndog 2012-03-29 15:54:49