Re: foreach Schleife
am 02.11.2006 11:55:50 von Jens Riedel
Andreas Bauer wrote:
> Das andere Objekt, das $Author Objekt und deren Funktionen, sind in der
> Datei
> authorclass.php gekapselt. Im $Author Objekt in der authorclass.php ist
> nur der
> Nach- und Vorname.
> Da müßte ich eine neue Funktion, $Author -> getAuthorId() erstellen, das
> Objekt $Author
> umschreiben und dann für den ganzen restlichen Code mit ca. 45 Dateien
> anpassen.
Du hast Author-Objekte, die Name und Vorname, aber nicht die ID für die
DB-Zuordnung enthalten? Das würde ich als sehr verkorkstes Design
bezeichnen.
Das gleiche gilt für den Fall, dass das Hinzufügen einer Eigenschaft zu
einem Objekt die Änderung von anderen Dateien nach sich zieht, die
dieses Objekt verwenden.
Du solltest dein Design überdenken, je eher desto besser.
Gruß,
Jens
Re: foreach Schleife
am 02.11.2006 18:28:07 von Holger Pollmann
"Andreas Bauer" schrieb:
> Da hast Du schon recht. Der Grund, weshalb ich das über das $Book
> Objekt etwas umständlich mache ist:
> Mit dem $Book Objekt kann ich die $authorid durch die Funktion $Book
> -> getAuthorId bekommen. Die $authorid brauche ich zur weiteren
> Verwertung in den anderen Dateien.
Zunächst mal: dann bietet es sich an, for der foreach-Schleife einen
Array $found_authors (oder so) zu erzeugen und dann bei jedem
Schleifendurchgang si etwas zu machen:
if(!in_array($Book->getAuthorId, $found_authors)){
$found_authors[] = $Book->getAuthorId;
...
}
Da, wo die ... stehen, kommt dann der Ausgabecode. Wenn du das ganze mit
einem ID machen kannst, wird es nämlich eindeutig, wohingegen das
Speichern von Vor- und Nachnamen zusammen ja leider nicht eindeutig sein
muß (es können ja verschiedene Personen Hans Müller heißen). Nimm also
die ID dafür, wenn es denn sein muß. Aber:
> Das andere Objekt, das $Author Objekt und deren Funktionen, sind in
> der Datei authorclass.php gekapselt. Im $Author Objekt in der
> authorclass.php ist nur der Nach- und Vorname.
> Da müßte ich eine neue Funktion, $Author -> getAuthorId() erstellen,
> das Objekt $Author umschreiben und dann für den ganzen restlichen
> Code mit ca. 45 Dateien anpassen.
Was mußt du denn da anpassen? Alle die Stellen, die schon bisher die
Author-Klasse (nicht "das Objekt", btw, sondern vielmehr viele Objekte
von Typ der Author-Klasse, drum auch nicht "$Author-Klasse") benutzen,
werden doch von dessen zusätzlicher Funktionalität gar nicht beeinflußt
(bzw. sollten sie nicht - sonst sind sie alle mies geschrieben und
sollten eh umgeschrieben werden).
Davon abgesehen dürfte das Umschreiben der Author-Klasse kein Problem
sein. Mein Gott, du speicherst halt noch die ID. Viel mehr drüfte da
nicht dranhängen.
> Laß ich die foreach Schleife mit
> $Author): ?>
> [...]
>
> laufen, streikt der komplette andere Code wegen der $authorid beim
> Abschicken des "aendern" Links.
Vermutlich ist also der Array $Authors kein assoziativer Array, bei dem
die Author-ID als Schlüssel benutzt wurde. Dann sollte man das natürlich
auch nicht so benutzen.
> Im $Author Objekt is nur der Nach- und Vorname enthalten, nicht die
> authorid. In der DB-Tabelle der Autoren ist die authorid, der Nach-,
> und der Vorname (ein Feld Nach- und ein Feld Vorname) enthalten
Das klingt danach, als wäre schon die Author-Klasse verkorkst; warum
liest die nicht alle relevanten Daten aus?
> Deshalb wäre die Varante, alle bereits abgearbeiteten Autorennamen
> zwischenzuspeichern und jedes Mal abzuchecken, ob der jeweilige Name
> schon vorkam, die bessere, bevor ich sämtliche Dateien ändern und
> umschreiben muß. Hat einer eine Umsetzung für die Variante? Oder einen
> Tipp?
Das ist trivial, s.o.
--
( ROT-13 if you want to email me directly: uvuc@ervzjrexre.qr )
"Sie tragen Trauer? Der Untergang der DDR?" - "Nein, Leni Riefenstahl.
Der Führer hat sie zu sich genommen." -- Abschiedsshow Scheibenwischer,
02.10.2003
Re: foreach Schleife
am 02.11.2006 22:15:11 von Hadanite Marasek
Du musst den SQL-String entsprechend formulieren. Wenn Du die Autoren
normalisiert hast, select autor from autor; wenn nicht, dann select
distinct autor from buecher, angenommen, in der spalte sei der autor
gespeichert.
wenn du einen join machst bzw. bei der distinct-abfrage andere Werte mit
abfragst, bekommst du den Autor natürlich mehrfach.
Sollte die Datenbank nicht normalisiert sein, rate ich Dir dringend, das
zu tun.
Andreas Bauer wrote:
> Hallo NG,
> mit einer foreach Schleife, die die Autorennamen aus der Datenbank
> einliest,
> erzeuge ich eine Autorenliste. Da ein Autor mehrere Bücher
> besitzen kann, kommen einige Autorennamen in der Autorenliste
> doppelt oder drei-, vierfach etc. vor.
> Wie kann ich das in der foreach Schleife verhindern?
Re: foreach Schleife
am 02.11.2006 22:52:03 von Martin Lemke
Andreas Bauer schrieb:
> kommen einige Autorennamen in der Autorenliste
> doppelt oder drei-, vierfach etc. vor.
> Wie kann ich das in der foreach Schleife verhindern?
Das solltest Du in Deinem SQL-String zum Abfragen der Datentabelle tun.
Martin