2009-06-16 5 views
0

fragte ich einen question yesterday und die Antwort, die ich den ersten Teil meines Problems beantwortet bekommen hat - ich habe jetzt eine Abfrage, die eine Liste ähnlich wie diese erzeugt:php Liste in eine Tabelle

fname, sname, uname, assignment, task, grade 
joe, blogs, joe.blogs, 1, 1, 52 
joe, blogs, joe.blogs, 1, 2, 58 
jim, blogs, jim.blogs, 1, 1, 95 
jim, blogs, jim.blogs, 1, 2, 86 
amy, blogs, amy.blogs, 1, 1, NULL 
amy, blogs, amy.blogs, 1, 2, 76 

ein so weiter. Es nimmt die letzte Note von der Liste und funktioniert immer noch, wenn ein Schüler keine Note für die Aufgabe erhalten hat.

Was ich als nächstes will, ist eine Tabelle zu erzeugen, die in etwa so aussieht:

 | Assignment 1 | Assignment 2 | 
Name |-----------------|-----------------| 
     | Task 1 | Task 2 | Task 1 | Task 2 | 
=========================================== 
Joe.. | 52 | 58 | .. | .. | 
Jim.. | 95 | 86 | .. | .. | 
Amy.. | U  | 76 | .. | .. | 
... 

wieder, ich habe vor ähnliche Dinge getan, aber ich weiß, sie waren schrecklich ineffizient - Im Idealfall würde Ich mag an in der Lage sein, diese Tabelle mit einem einzigen Durchlauf des Arrays zu erzeugen.

+0

Kann angenommen werden, dass Ihre Liste/Array nach Name, Zuweisung, Aufgabe sortiert wird und alle Werte, die nicht existieren, mit NULL zurückgegeben werden, ala Amys Aufgabe 1 - Aufgabe 1? – tschaible

+0

Entschuldigung, meine Daten oben machen das nicht offensichtlich! Die Daten werden sortiert nach Nachnamen, Vornamen, Zuordnung und dann nach Aufgabe, also ist alles zusammen gruppiert. – MalphasWats

Antwort

1

Was Sie tun müssen, ist Spalten hinzufügen, während Sie durch die Zeilen iterieren. Es könnte effizienter sein, zuerst eine kleine Abfrage auszuführen, die Spalten auswählen:

SELECT 
    * 
FROM assignment_tasks 
ORDER BY 
    Assignment_ID ASC, 
    Task_ID ASC; 

dann die Abfrage passen das Array Laden Sie nach Benutzer, Zuordnung, Aufgabe zu bestellen beschrieben. Auf diese Weise sind die Werte im Array in der gleichen Reihenfolge wie in der Tabelle (Zeile für Zeile, von links nach rechts). Wenn ein Wert fehlt (oder NULL, ist egal), drucken Sie U.

Natürlich geht dies mit der Annahme, dass die Anzahl der Zuweisungen und Aufgaben im Vergleich zu der Anzahl der Einträge im Array klein ist.

1

Werfen Sie einen Blick auf die group by Klausel. Ich persönlich benutze es nicht, weil ich finde, dass ich noch am Ende foreach über die Ergebnisse gehen muss, um ein geschachteltes Array zu erstellen, wie ich will - aber es könnte sein, was Sie suchen. Hier ist ein link that uses sums so ist es nicht ideal, aber es zeigt Ihnen ein wenig mehr Informationen über die SQL.