Variablen sortieren - Schleifenproblem

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Shauku
Mitglied
Beiträge: 120
Registriert: 20.11.2006 20:24

Variablen sortieren - Schleifenproblem

Beitrag 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?
Benutzeravatar
atrox
Mitglied
Beiträge: 242
Registriert: 08.08.2007 00:48
Wohnort: Ravensburg

Beitrag 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
Benutzeravatar
Shauku
Mitglied
Beiträge: 120
Registriert: 20.11.2006 20:24

Beitrag 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.
Benutzeravatar
Shauku
Mitglied
Beiträge: 120
Registriert: 20.11.2006 20:24

Beitrag 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) .
Antworten

Zurück zu „Coding & Technik“