2012-03-29 10 views
0

私はすべてのインク付けされたレコードを選択するために使用されるクエリに2つの値を設定する動的レコードセットを作成しています。フィールドに基づくPHP SQLループの結果

次の結果をループしてグループ化する必要がありますが、クエリで使用する値でグループ化する方法がわかりません。

リファレンスクエリ:

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

値33,34および36は、クエリに動的に渡される予定です。ループがないながら/

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を使用して: 私の目標は、

結果は次のようになります。同じFLDTYPEを共有するすべての結果をグループで表示することができますループ/リピート領域を有することです表示するすべての項目が表示されますが、グループ化されている項目は表示されません。 ForEachループはソリューションですか?

+0

はあなたがGROUP BYと異なるSQL文を試してみました?このような何か結果はグループで返されます。その後、ループを使用して、タイプが変更されたときに改行を削除するか、または異なるタイプを区別したいものを削除することができます。 – kevingreen

+1

GROUP BYは結果をグループで返しません。グループの結果を返します。つまり、ここでGROUP BYを使用すると、3行だけ戻ってしまうことになります。 –

+0

はい、当初私はGROUP BYを試していましたが、選択IN()で使用すると機能しないことが判明しました – Burndog

答えて

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

はい、私はこれが私が探していると信じています。ありがとう! – Burndog

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

これは、まずfldTypeでグループ化し、次にfldRankでグループ化します。あなたのPHPコードでは、最後のfldTypeを覚えておき、変更のたびに新しいグループを追加してください。すべてのfldTypesはグループ化されているので、結果を順番にループすることができます。

+0

はい、これは上記の方法で結果を返しますが、私は "---- ---- "壊れます。実際の状況では、結果(各グループ)は書式設定された表に設定されるためです。 – Burndog

関連する問題