2012-03-29 8 views
0

Ich erstelle ein dynamisches Recordset, wo ich ein paar Werte zu der Abfrage auffüllen, mit der alle eingefärbten Datensätze ausgewählt werden.PHP SQL Loop-Ergebnisse basierend auf Feld

Als nächstes brauche ich Schleife und gruppieren Sie die Ergebnisse, aber bin mir nicht sicher, wie nach den in der Abfrage verwendeten Werten zu gruppieren.

Referenz query:

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

Die Werte 33,34 und 36 werden dynamisch an die Abfrage übergeben werden. Mein Ziel ist es, dann eine Schleife/Repeat-Region zu haben, die Anzeige in Gruppen mit allen Ergebnissen ermöglicht, die die gleichen fldType

Ergebnisse sollen wie folgt aussehen teilen:

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 

mit einem do/while-Schleife tut zeigt alle anzuzeigenden Elemente an, aber keine Gruppierungen. Ist eine ForEach-Schleife die Lösung?

+0

Haben Sie verschiedene SQL-Anweisungen mit einer GROUP BY versucht? Das würde die Ergebnisse in Gruppen wiedergeben. Sie könnten dann eine Schleife verwenden und wenn sich der Typ ändert, lassen Sie einen Zeilenumbruch oder was auch immer Sie die verschiedenen Typen unterscheiden möchten. – kevingreen

+1

GROUP BY * gibt * die Ergebnisse nicht in Gruppen zurück, sondern gibt ein einzelnes Ergebnis für eine Gruppe zurück. Das heißt, die Verwendung von GROUP BY würde dazu führen, dass nur drei Zeilen zurückkommen. –

+0

Ja zunächst versuchte ich GROUP BY, aber es funktioniert nicht, wenn mit der Auswahl verwendet IN() – Burndog

Antwort

3

Wenn Sie in Ihrer Berichtsausgabe über eine visuelle Gruppierung sprechen, müssen Sie diesen Wert für jede Schleifeniteration nachverfolgen und dann Ihre visuelle Unterbrechung ausgeben, wenn Sie eine Änderung feststellen. Etwas wie folgt aus:

$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; 
    } 
} 

Stellen Sie außerdem sicher, dass Sie tun:

ORDER BY fldType, fldRank 
+0

Ja, ich glaube das ist was ich suche. Vielen Dank! – Burndog

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

Dies wird zuerst mit fldType und dann mit fldRank gruppiert. Merken Sie sich in Ihrem PHP-Code einfach den letzten fldType und fügen Sie bei jeder Änderung eine neue Gruppe hinzu. Alle fldTypes werden jetzt gruppiert, so dass Sie die Ergebnisse der Reihe nach durchlaufen können.

+0

Ja, dies gibt die Ergebnisse in der oben genannten Weise zurück, aber ich versuche Gruppen wie angezeigt durch die "---- ----" geht kaputt. In Wirklichkeit liegt das daran, dass die Ergebnisse (jede Gruppe) auf eine formatierte Tabelle gesetzt werden müssen. – Burndog

Verwandte Themen