Ausgabe und Formatierung einer SQL-Abfrage mit Schleife

Der_baum

Mitglied
Guten morgen zusammen!

Ich hatte mal eine Frage zu einer Foreach-Schleife, am besten erkläre ich das ganze an einer Schulklasse.

Eine Schule hat Klassen, diese wiederum Schüler, Die Schüler wieder eigene Seiten (hier aber irrelevant). Logisch.
Mein SQL-Table sieht so aus:

ID | Schule |Klasse | Schüler | .....
1 | Abc | 9b | Max Mustermann
2 | Abc | 8f | Klara Musterfrau
3 | Xyz | 9b | Heinz von Muster

So, jetzt Fragen ich die Daten wie folgt ab:
SELECT ID, Schule, Klasse, Schüler FROM Schulen WHERE Schule = 'Abc'.

Liefert ja die erste und zweite Zeile als Ergebnis. Nun zum eigentlichen Problem.
Ich möchte nun bei der Ausgabe erreichen, dass ich z.B. zwischen jeder verschiedenen Schule einen Strich (z.B. <hr>.... egal) bekomme, jedoch die Schüler auch Formatiert ausgegeben werden, so z.B.:

-------------------------------------------------------------------------------
Schule: Abc

---
Schüler: Max Mustermann
Klasse: 9b
---
Schüler: Heinz von Muster
Klasse: 9b
---

-------------------------------------------------------------------------------
Schule: XYZ

---
Schüler: ....



So bekomme ich schonmal alle Werte untereinander:

PHP:
if (isset($e)) {
    foreach($page_data as $v) {
//Formatierung
    }


Hoffe ich kommte es, so früh am morgen, einigermaßen verständlich erklären.

Gruß Baum
 
PHP:
$sql_query_string = "SELECT ID, Schule, Klasse, Schüler FROM Schulen WHERE Schule = 'Abc'";
$result =mysql_query($sql_query_string) or die('query fehlgeschlagen');
echo '<table border="0"><tr><td width="300" align="center">';
while(($datensatz=mysql_fetch_assoc($result))) {
    If ($datensatz[Schule] != $Schulesave){
        echo '$datensatz[Schüler]'; //usw.
    }else{
        echo '</tr><tr>'; // Zeile schliesen/neue beginnen
        echo '$datensatz[Schüler]'; //usw.
    }
$Schulesave = $datensatz[Schule];
}
echo '</table>';

So ca. müsste es funktionieren

mfg Spikaner
 
Mist, Sorry!
Ich habe vergessen das ich die Daten aus einem zweidimensionalen Array nehmen muss, dass wie folgt aussieht:

Code:
array(13) {
  [0]=>
  array(3) {
    ["Schüler"]=>.....
    ["Klasse"]=>.....
    ["Schule"]=>.....
  }
  [1]=>
  array(3) {
    ["Schüler"]=>.....
    ["Klasse"]=>.....
    ["Schule"]=>.....
  }
.
.
.
.}

Ich muss die Daten mit foreach abgreifen, da das ich die Daten ja als array übergebe. Bedingt durch meine SQL-Klasse.

Sorry, nochmal!

Gruß,
Baum



EDIT: Bedingt durch foreach muss folgendermaßen arbeiten:
PHP:
$e = count($page_data)-1;
if (isset($e)) {
   foreach($page_data as $v) {
      //formatierung
   }
}
 
Zuletzt bearbeitet:
Die Lösung hasst du ja im prinzip schon...

PHP:
echo '<table border="0"><tr><td width="300" align="center">';
$i = 0;
$Schulesave = $array[0][3];
$e = count($page_data)-1;
if (isset($e)) {
   foreach($page_data as $v) {
      //formatierung anfang 
          If ($array[$i][3]  != $Schulesave){
             echo '</tr><tr>'; // Zeile schliesen/neue beginnen
             echo '$array[$i][3]'; //usw.
          }else{
             echo '$array[$i][3]'; //usw.
          }
   $Schulesave = $array[$i][3];
   $i++;
   //ende
   }
}
echo '</table>';

mfg Spikaner

P.S. Nicht getestet! Rechtschreib- und Denkfehler bleiben eigentum des Autors.
 
Guten morgen.

Ja, so habe ich mir das schon vorgestellt. Nur ich versuche irgendwie immer zwanghaft von IF() Abfragen wegzukommen.
Also gibt es dann da keine andere Lösung, oder?

Danke euch schonmal

Gruß Baum
 
Guten morgen,

...wenn du das sagst! Dann kann ich ja endlich meine dreifach-verschachtelten ELSEIF() Abfragen Online stellen! :p :-)
Haha. Spaß beiseite, dann werde ich die ganze Geschichte soweit wie möglich fertig machen und das Ergebnis nochmal posten, .... für die Nachwelt!


Danke für deine und die HIlfe der anderen,
Gruß Baum
 
Du könntest deinem Array noch eine Dimension hinzufügen in der die Schule enthalten ist.

z.B.
PHP:
$data = array();
$data["abc"][0] = array("jens", "8c");
$data["abc"][1] = array("hans", "9c");
$data["xyz"][0] = array("peter", "7c");

dann müsstest 2 foreach in einander machen.

PHP:
echo "<table>";

foreach($data as $schule => $d1) {
  echo "<tr><th>".$schule."</th>";
  foreach($d1 as $row) {
    echo "<td>".$row[0]."</td><td>".$row[1]."</td>";
  }
  echo "</tr>";
}

echo "</table>";
 
Hi,

das wird leider nicht funktionieren, da der Schlüssel "Schule" sich in der zweiten Dimension des Arrays befindet.

Code:
array(13) {
  [0]=>
  array(3) {
    ["Schüler"]=>peter
    ["Klasse"]=>9c
    ["Schule"]=>ABC
  }
  [1]=>
  array(3) {
    ["Schüler"]=>Hansi
    ["Klasse"]=>8f
    ["Schule"]=>xYz
  }
  [2]=>
  array(3) {
    ["Schüler"]=>Mike
    ["Klasse"]=>9a
    ["Schule"]=>xYz
  }
.
.
.}


Gruß Baum
 
Zurück