Tabelle / Matrix aus MySQL-Daten erstellen

flowryan

Grünschnabel
Hallo liebe Community,

ich stehe zurzeit vor einer (für mich) unlösbaren Aufgabe:

- Es muss eine Qualifikationsmatrix aus einer Datenbank (MySQL) erstellt werden.
Diese soll z.B. so aussehen:
http://s1.directupload.net/file/d/3069/ggronoz2_png.htm

Die Datenbank dahinter:
- tl_mitarbeiter {mitarbeiter_id, nachname, vorname, beruf, funktion}
- tl_pruefung {pruefung_id, mitarbeiter_id,pruefgrund_id, datum}
- tl_pruefgrund {pruefgrund_id,pruefkategorie_id, bezeichnung}
- tl_pruefkategorie {pruefkategorie_id, bezeichnung}

Erklärung:
- tl_mitarbeiter: Hier sind die Mitarbeiterdaten enthalten.
- tl_pruefung: Hier wird das Datum gespeichert, an dem der Mitarbeiter die Prüfung wiederholen muss
- tl_pruefgrund: (2. Zeile der Tabelle - Grün) Hier stehen die Bezeichnungen der Prüfungen
- tl_pruefkategorie: (1. Zeile der Tabelle - Grün) Hier ist die Oberkategorie der Prüfungen zu finden.

Das Problem:
- Es sollen mehrere Mitarbeiter und beliebig viele (hinzufügbare) Prüfungen, Kategorien und Gründe eingefügt werden können.
Das Speichern der Daten und das Auflisten an sich ist ja kein Problem.

Aber ich scheitere zurzeit einfach an der Darstellung der Tabelle in Matrixform.

Ich sitze hier - mit dem Buchstäblichen "Brett vorm Kopf" und hoffe ich bekomme hier den nötigen Denkanstoß.

Ich bedanke mich bereits jetzt bei euch :)
 
Hallo,

also ich denke das Problem ist der PHP-Code.

Als SQL-Query würde ich folgendes machen:
Code:
SELECT nachname, vorname, beruf, funktion, tl_pruefgrund.bezeichnung AS pruefgrund, tl_pruefkategorie.bezeichnung AS pruefkategorie
FROM tl_mitarbeiter 
LEFT JOIN tl_pruefung ON tl_mitarbeiter.mitarbeiter_id = tl_pruefung.mitarbeiter_id
LEFT JOIN tl_pruefgrund ON tl_pruefung.pruefgrund_id = tl_pruefgrund.pruefgrund_id
LEFT JOIN tl_pruefkategorie ON tl_pruefgrund.pruefkategorie_id = tl_pruefkategorie.pruefkategorie_id

(wenn mich nicht alles täuscht - sitze leider nicht mehr vor dem Rechner, wo die Daten liegen).
Damit dürfte ich aber dann alle wichtigen Daten haben. Ggf. noch ein ORDER rein, damit ich die Daten sortiert habe.

Aber weiter komme ich nicht...

Danke!
 
Naja auslesen und in einer Tabelle anzeigen:
PHP:
$result = mysql_query($sql_string);
echo '<table>';
echo '<tr>';
echo '<td>Nachname</td><td>Vorname</td><td>Beruf</td>';
echo '</tr>';
while( $row = mysql_fetch_assoc($result) ){
  echo '<tr>';
  echo '<td>' , $row['nachname'], '</td>';
  echo '<td>' , $row['vorname'], '</td>';
  echo '<td>' , $row['beruf'], ' </td>';
  echo '</tr>';
}
echo '</table>';
 
Danke für deine Antwort - aber ich glaube so komme ich nicht dahin, wo ich hin wollte.

Ich weiß nicht, ob ich mich vllt. mißverständlich ausgedrückt habe.
Wenn man sich die Grafik anschaut: http://s1.directupload.net/file/d/3069/ggronoz2_png.htm

Also es sollen sowohl nach rechts, als auch nach unten später weitere Daten eingefügt werden.
Wenn ich jetzt die Tabelle so abarbeite, wie du vorschlägst würde sie so aussehen:

Code:
Nachname, Vorname, Beruf, Funktion, pruefgrund, pruefkategorie

Die Kategorie soll jedoch ganz oben (nur einmal) in der Tabelle stehen.
Die Gründe sollen, sofern sie zu dieser Kategorie gehören, direkt da drunter angezeigt werden.

Wenn ein Datum für den jeweiligen Grund bei dem Mitarbeiter gefunden wurde, dann soll dort das Datum eingetragen werden.

Ich bin zurzeit am überlegen, ob ich das Array nicht ggf. anders durchlaufen muss, sodass ich nachher z.B. folgendes habe:

$data[mitarbeiter_id][pruefgrund_id]=Datum

Damit stehe ich aber immernoch vor dem Problem, dass ich nicht weiß, wie ich das in die Tabelle gießen kann.

Ich habe bereits mit folgendem experimentiert:
PHP:
foreach($data AS $row)
{
     foreach($row AS $field_name=>$field_value)
     {
            echo $field_name."=>".$field_value."| ";
      }
      echo "<br />\n";
}
 
So,

habe es jetzt im Endeffekt genau so gelöst.
Funktioniert also.

Ganz zu Anfang wird einmal die Kopfzeile geschrieben. Danach wird die Schleife mit den Einträgen durchlaufen - also einfacher als gedacht.

Vielen Dank nochmal!! :)
 

Neue Beiträge

Zurück