phpbar.de logo

Mailinglisten-Archive

Re: mein Script verschluckt nun nichts mehr
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mein Script verschluckt nun nichts mehr



Hoi Thomas,

Kleine Bitte vorweg: Poste Antworten auf Listenmails auch immer in die
Liste, es sei denn, es ist offtopic.

> Hallo Jens,

Jan. Aber das macht auch nichts :)

> warum es do{} while sein muss.

Ganz einfach: Du hast mit deiner Abfrage eine Struktur erzeugt, die so
viele Zeilen wie Angebote hat (1 Anbieter gekreuzt mit n Angeboten macht
1 * n = n Zeilen). In den ersten Spalten steht jeweils das Angebot, in
den hinteren Spalten der Anbieter, der ja in jeder Zeile gleich ist.

Mit dem ersten Fetch liest du die erste Zeile ein. Du erhälst eine
Zeile, die hinten den Anbieter enthält (das tun ja alle), aber vorne
bereits das erste Angebot! Wenn du jetzt in die Angebotsschleife
eintrittst, dann darfst du nicht nochmal einen Fetch machen, denn sonst
erhälst du die 2. Zeile! Der Fetch darf erst HINTERHER erfolgen. Deshalb
do {} while.

> Warum steht die kundenliste so sehr von der angeboteliste in
> Abhängigkeit. Muß die Abfrage vielleicht noch anders aussehen?

Das zweite Problem ist direkt mit dem ersten verknüpft: Wenn dein
Anbieter noch kein Angebot hat, dann kriegst du mit deiner Abfrage 0
Datensätze! Warum? Weil 1 Anbieter mit 0 Angeboten ergibt 1 * 0 = 0
Datensätze!

Du musst dir erst mal klar werden, was so eine Abfrage überhaupt macht.
Ich habe am 13.9. unter dem Thema "Re: Select-Alternative" eine Mail
gepostet, die die grundlegenden Eigenschaften von Abfragen mit
Verknüpfungen, sogenannten JOINS, erklärt. Such sie und lies sie dir
durch.

Dein Problem ließe sich nun auf zweierlei Weise lösen:
Entweder du machst statt dem INNER JOIN (durch das Komma zwischen den
Tabellen festgelegt) einen Anbieter LEFT JOIN Angebote, dann liefert die
Datenbank auch Einträge für Anbieter zurück, die noch kein Angebot
haben. Allerdings musst du dann beim Eintritt in die do {} while
-Schleife abchecken, ob überhaupt ein Angebot vorliegt.

Logischer, sinnvoller und performanter wäre es, die beiden Abfragen zu
trennen. Frag zuerst den Anbieter ab, danach die Angebote mit WHERE
anbieter_id=$anbieter.

Gruß Jan

--

> Hallo Jens,
> 
> bei den Schleifen wird mir noch ganz schwindelig. Da muss ich aber
> noch mal nachlesen, warum es do{} while sein muss. Aber super,
> dass das geklappt hat.
> Eine kleine Falle hast du mir aber noch bei deiner Lösung
> eingebaut. Du hast das ; ausgelassen :-)  Ist mir direkt
> aufgefallen, weil ich wegen eines fehlenden Semikolons schon mal
> einen halben Tag vor einem Script gesessen habe. Nun bin ich
> sensibilisiert für semis :-)
> 
> Kannst du mir vielleicht sagen, warum nun aber Leute, die noch
> keinen Eintrag vorgenommen haben, sich nicht einloggen können?
> Warum steht die kundenliste so sehr von der angeboteliste in
> Abhängigkeit. Muß die Abfrage vielleicht noch anders aussehen?
> Wenn ja, werde ich mal dort suchen.
> 
> Danke und Gruß,
> 
> Thomas Barth...

---
*** Weitere Infos zur Mailingliste und MySQL unter www.4t2.com/mysql 


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive