2012-03-29 60 views
0

我正在創建一個動態記錄集,其中我將一些值填充到用於選擇所有簽名記錄的查詢中。基於字段的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

回答

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 2012-03-29 16:06:32

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 2012-03-29 15:54:49