Mailinglisten-Archive |
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
php::bar PHP Wiki - Listenarchive