Seite 1 von 1

Variablen sortieren - Schleifenproblem

Verfasst: 10.07.2008 22:41
von Shauku
Ich hab seit einigen Tagen ein Problem, zu dem mir keine Lösung einfällt. Also stell ichs hier mal vereinfacht dar, vielleicht bringt mich ja jemand auf den richtigen Weg. Ich hab eine Datenbankabfrage aus der ich viele Variablen auslese. Dazu gehören 2 Variablen die in einer n:m Beziehung zueinander stehen.
$name n:m $edition

Das ganze wird am Ende ganz klassisch in einer while-schleife ausgegeben.

Code: Alles auswählen

while($data=mysql_fetch_array($resultset)){
echo "<tr><td>";
echo $name;
echo $edition;
echo "</td></tr>";
}
Da es vorkommen kann, dass der selbe $name mit unterschiedlichen $editionen vorkommen kann, würde ich das ganze gerne so darstellen, dass jeder $name nur einmal angegeben wird und dannach die zugehörigen $editionen aufgelistet werden. Also im Ergebnis dann:

Code: Alles auswählen

<tr><td>
$name
$edition
$edition
$edition
</td></tr>
Ich kriegs einfach nicht hin. Jemand eine Idee, für eine passende If-Abfrage, Schleife oder eine Nachbearbeitung der Arrays?

Verfasst: 11.07.2008 11:58
von atrox
Das einfachst wäre, wenn du zwei Verschachtelte Schleifen hättest.
Eine für den Namen, darin die andere für die Edition, also etwa so:

Code: Alles auswählen

while(hole nur $name)
{
echo "<tr><td>";
echo $name;
  while (hole alle $editionen von $name über mysql_quers oder so)
  {
    echo $edition;
  }
echo "</td></tr>";
}
Kannst nachvollziehen was ich meine? :D

Verfasst: 11.07.2008 13:11
von Shauku
Ja, sowas hab ich auch schon versucht. Bringt aber eine Fülle an neuen Problemen, die sich nur mit sehr viel Aufwand lösen lassen :) (das Script wird dann auch echt langsam) .

In einem Formular wird angeklickt, wonnach man suchen will (SELECT). Dazu gehören die Felder $name als auch $edition.

Sagen wir mal, du bekommst als Ergebnis:

Code: Alles auswählen

$name1 - $edition1
$name1 - $edition2
$name2 - $edition1
Wenn man das dann so machst, wie du angesprochen hast (also SELECT nach $name UND $edition), wäre das Ergebnis (wenn es irgendwann mal funktioniert):

Code: Alles auswählen

$name1 - $edition1 - $edition2
$name1 - $edition1 - $edition2
$name2 - $edition1
Wenn man die DB Abfragen ganz trennt (so wie du vorgeschlagen hast), zieht das einen Rattenschwanz an Problemen mit sich, den ich nicht bewältigen kann (ich muss ja trotzdem gewährleisten, dass ich nach $name UND $edition gleichzeitig suchen (SELECT) kann). Also CASEs ohne Ende.
An der Stelle muss ich dann auch doppelte Löschen und wenn ich doppelte Einträge löschen kann, sollte das ja auch bei der oberen Variante irgendwie gehen. Ne Idee, wie ich die doppelten Einträge überspringe? Oder eine ander Variante, wie ich das hinbekomme?


EDIT: Gibts vielleicht eine Möglichkeit im Array abzufragen, wie die nächste Variable aussieht? Also $name+1 (also den nächsthöheren Key checken)? Dann würde sich das alles ganz bequem per IF Abfragen lösen lassen. Ich bin schon am Suchen, aber ich hab noch nix brauchbares gefunden.

Verfasst: 14.07.2008 10:07
von Shauku
Ich habs nun mit deinem Ansatz gelöst, atrox :) . Eine zweite while-Schleife in die erste und eine if-Abfrage ob der aktuelle Datensatz mit dem alten übereinstimmt bringen das gewünschte Ergebnis.

Danke für die Hilfe 8) .