SELECT Abfrage mit Gruppierung und Überschrift

kippi01

Mitglied
Hallo,

ich hoffe mir kann jemand bei meinem kleinen Problem helfen:

Ich habe in meiner MySQL-Datenbank eine Tabelle mit verschiedenen Spalten. Spalte 1 und 2 möchte ich gruppieren uns jeweils als Überschrift ausgeben, die restlichen Spalten unter der Überschrift als Tabelle darstellen.

Die SELECT und GROUP BY Klausel ist bekannt. Aber wie bekomme ich das mit der Tabellenüberschrift hin? :confused:

Beispiel:

Spalte1 -> Spalte2 //Gruppierung 1
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |

Spalte1 -> Spalte2 //Gruppierung 2
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |

Spalte1 -> Spalte2 //Gruppierung 3
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
 
Hei kippi01,
kannst du das noch mal anders formulieren. Derzeit habe ich ein Problem dass mir vorzustellen ...

Grüße Thomas
 
Ok,

zur Zeit sieht die Ausgabe wie folgt aus:

Spalte1 -> Spalte2
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |

Spalte1 -> Spalte2
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |

Spalte1 -> Spalte2
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |

Spalte1 -> Spalte2
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |

u.s.w.

Ich möchte aber, wenn die Werte von Spalte1 und 2 identisch sind, diese gruppieren
und nur einmal als Überschrift ausgeben. Darunter dann die dazugehörigen restlichen Werte und danach die nächste gruppierte Überschrift...

Spalte1 -> Spalte2 //Gruppierung 1
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |

Spalte1 -> Spalte2 //Gruppierung 2
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
 
Entweder bin ich grad zu müde oder ich hab ein Blockade in meinem Denken ....

kannst du mal eine fiktive Tabelle aufschreiben und dazu ein fiktives Beispiel ... ich bin grad nicht in der Lage so abstrakt zu denken. Tut mir leid :(

Grüße Thomas
 
Hi,
also wirklich toll formuliert ist die Frage wirklich nicht, aber ich versuch mein Glück mal.
Ich stell mir das grad so vor, als ob du zum Beispiel eine Userdatenbank gruppiert nach Wohnort ausgeben möchtest. Das funktioniert theoretisch, nur die Ausgabe ähnelt meiner Meinung und Wissens nach einer durch Order By sortierten Query_Result. Sprich der Wert aus Spalte 2 ist immer der gleiche nur die nachfolgenden unterscheiden sich. DU müsstest es also so machen das du spalte 2 ausgibst und danach nur noch den Rest. Wenn sich dann der Wert von $row[SPALTE2] ändert machst ne neue Überschrift und wieder von vorn. Endet also in Schleifen und If Anweisungen.
Denke das ichs vom prinzip her richtig verstanden hab, wenn nicht mecker :o)
 
Ok,
meine Tabelle hat folgende Einträge

Standort | Altersgruppe | Art | Stufe | Tag | Zeit

CO | Erwachsene | Club | GK1 | Montag | 19.30
CO | Erwachsene | Club | GK2 | Montag | 20.30
CO | Erwachsene | Club | GK3 | Montag | 21.30
CO | Erwachsene | Club | GK4 | Montag | 22.30
CO | Jugendliche | Anfänger | JK1 | Montag | 14.00
CO | Jugendliche | Anfänger | JK2 | Montag | 15.00
CO | Jugendliche | Anfänger | JK3 | Montag | 16.00
CO | Jugendliche | Anfänger | JK4 | Montag | 17.00

Die Ausgabe soll wie folgt aussehen:

Zielseite: CO -> Erwachsene -> Club

GK1 | Montag | 19.30
GK2 | Montag | 20.30
GK3 | Montag | 21.30
GK4 | Montag | 22.30

Zielseite: CO -> Jugendliche -> Anfänger

JK1 | Montag | 14.00
JK2 | Montag | 15.00
JK3 | Montag | 16.00
JK4 | Montag | 17.00

D.h. die Spalten Standort, Altersgruppe und Art sollen gruppiert und jeweils als Überschrift über den restlichen Werte stehen.
 
Hier ein kleines Gedankenspiel von mir. Der Quellcode läd natürlich dazu ein, ihn zu vereinfachen und vollständig zu automatisieren. So ist er aber leicht verständlich...

PHP:
<?php
		$db = mysql_connect();
		$res = mysql_db_query("meinDatenbank","SELECT * FROM meineTabelle");
		mysql_close($db);
		
		$num = mysql_affected_rows($res);
		
		$idErw = 0;
		$idJu = 0;
		
		/* auslesen einzelner Zeilen */
		while($meinArray = mysql_fetch_array($res))
		{			
			if($meinArray["Altersgruppe"] == "Erwachsene")
			{
			$idErw += 1;
			
			$erwachsene[idErw]["Standort"] = $meinArray["Standort"];
			$erwachsene[idErw]["Altersgruppe"] = $meinArray["Altersgruppe"];
			$erwachsene[idErw]["Art"] = $meinArray["Art"];
			$erwachsene[idErw]["Stufe"] = $meinArray["Stufe"];
			$erwachsene[idErw]["Tag"] = $meinArray["Tag"];
			$erwachsene[idErw]["Zeit"] = $meinArray["Zeit"];			
			}
			else
			{
			$idJu += 1;
			
			$jugendliche[idJu]["Standort"] = $meinArray["Standort"];
			$jugendliche[idJu]["Altersgruppe"] = $meinArray["Altersgruppe"];
			$jugendliche[idJu]["Art"] = $meinArray["Art"];
			$jugendliche[idJu]["Stufe"] = $meinArray["Stufe"];
			$jugendliche[idJu["Tag"] = $meinArray["Tag"];
			$jugendliche[idJu]["Zeit"] = $meinArray["Zeit"];
			}				
		}
		echo "<table border=\"1\">";
		echo "<caption>$erwachsene[1][\"Standort\"] -> $erwachsene[1][\"Altersgruppe\"] -> $erwachsene[1][\"Art\"]</caption>";
		for($zaehler = 1; $zaehler <= $idErw; $zaehler++)
		{
			echo "<tr>";
					echo "<td>$erwachsene[$zaehler][\"Stufe\"]</td>";
					echo "<td>$erwachsene[$zaehler][\"Tag\"]</td>";
					echo "<td>$erwachsene[$zaehler][\"Zeit\"]</td>";
			echo "</tr>";
		}
		echo "</table><br><br>";
		echo "<table border=\"1\">";
		echo "<caption>$jugendliche[1][\"Standort\"] -> $jugendlice[1][\"Altersgruppe\"] -> $jugendliche[1][\"Art\"]</caption>";
		for($zaehler = 1; $zaehler <= $idJu; $zaehler++)
		{
			echo "<tr>";
					echo "<td>$jugendliche[$zaehler][\"Stufe\"]</td>";
					echo "<td>$jugendliche[$zaehler][\"Tag\"]</td>";
					echo "<td>$jugendliche[$zaehler][\"Zeit\"]</td>";
			echo "</tr>";
		}
		echo "</table>";
?>
 
Zurück