Schleife bis sich ein Wert ändert, dann die Schleife neu beginnen

Turtle78

Mitglied
Hallo zusammen,

ich versuche schon länger diesem Problem Herr zu werden, habe aber anscheinend ein Brett vor dem Kopf. Ich lese Werte aus einer mySQL-Tabelle aus und sortiere sie nach einer Spalte. Nun möchte ich die Ausgabe deart gestalten, daß eine Spalte als Überschrift genommen wird und alle Werte dieser Gruppe darunter stehen. Wenn sich der "Überschirft-Wert" ändert soll die Schleife neu begonnen werden. Kann mir mal jemand einen Denkanstoß geben?
Beispiel der Tabelle:

Deutschland - Berlin
Deutschland - Hamburg
Frankreich - Paris
Deutschland - München
Frankreich - Calais

Ausgabeformat:

Deutschland
- Berlin
- Hamburg
- München

Frankreich
- Paris
- Calais

Lieben Dank, Helge
 
Folgendes ist möglich:
PHP:
$array = array(
	array('Deutschland', 'Berlin'),
	array('Deutschland', 'Hamburg'),
	array('Deutschland', 'München'),
	array('Frankreich', 'Paris'),
	array('Frankreich', 'Calais'),
);
$last = null;
echo '<dl>';
foreach( $array as $item ) {
	if( $item[0] != $last ) {
		echo '<dt>'.htmlspecialchars($item[0]).'</dt>';
	}
	echo '<dd>'.htmlspecialchars($item[1]).'<dd>';
	$last = $item[0];
}
echo '</dl>';
 
Dafür brauchst Du nur 2 Abfragen

1. Nur die Länder abfragen
2. Während die Länder durchlaufen werden Stadt abfragen


also in etwa so

PHP:
$query = "SELECT land FROM meineTabelle GROUP BY land;";
$result = mysql_query($query);
while($data= mysql_fetch_array($result)){
	#Überschrift -> Land
	print '<h1>'.$data["land"].'</h1>';
	
	#Städte auslesen
	$query = "SELECT stadt FROM meineTabelle WHERE land = '".$data["land"]."';";
	$ergebnis = mysql_query($query);
	while($inhalt = mysql_fetch_array($ergebnis)){
		print $inhalt["stadt"].'<br />';
	}
}
 
Zuletzt bearbeitet:
Das ganze kannst auch mit einer abfrage + Kontrollfunktion (if) lösen...
PHP:
$query="select land, stadt from tabelle";
$land ="";
while($data= mysql_fetch_array($result)){
    if($land != $data["land"]){
        print "<h1>".$data["land"]."<h1>";
        $land = $data["land"];
    }
    print $data["stadt"]."<br>";

}

so wie Gumbo es schon mit dem array gemacht hat, hier halt nur mit abfrage...
 
Zuletzt bearbeitet:
Hallo zusammen,

vielen Dank, die Lösung von Kahmoon funktioniert prima.
Ich werde aber auch einmal die anderen durchtesten um zu verstehen und zu lernen was da getrieben wird. Ich weiß auch nicht wiso ich nicht auf den Gedanken gekommen bin mehrere Abfragen und while Schleifen zu verschachteln.

Also vielen Dank,
Helge
 

Neue Beiträge

Zurück