Rolf B: mysql - 2 Queries oder doch eine?

Beitrag lesen

Hallo Jörg,

Nicht bös sein, aber ich glaube, so wird das eher nichts. Du hast die Daten aus Tabelle1 unberücksichtigt,

Nee, hab ich berücksichtigt, nur habe ich die Tabelle unachtsamerweise artikel statt table1 genannt. Steht doch drüber: „Artikel im Warenkorb holen“.

Deine Query1 tut das, was meine Query auch tut, ich hab nur noch ein paar Daten aus der table3 dazugepinnt (was einem Warenkorb entspricht: 7 Unterhosen, 9 Socken, etc) - aber da deine Daten mutmaßlich ganz anders aussehen, ist das reiner Spekulatius zu Ostern.

Der Unterschied ist nur, dass Du m.del in der Where Bedingung hast, d.h. du liest gelöschte Artikel nicht mit. Aber sagtest Du nicht, dass Du die trotz Löschung mit lesen wolltest?

Beim Lesen der Artikelbewertungen brauchst Du table1 nicht, wenn Du die benötigten IDs in der Artikelliste hast. Du machst einen JOIN von table1 und table2, verwendest aber keine Daten aus table1. Weder im SELECT noch im WHERE. Wozu also Joinen? Allerdings hast Du da ein bisschen an den Spaltennamen rumgemacht, das war vorher anders. Du hast jetzt t1_id und t2_id - ist das die Artikel-ID und die Bewertungs-ID? Dann solltest Du dg.t1_id mit selektieren.

Wenn Du das gemacht hast, kannst Du

  • das Array mit Artikeln im PHP über die Artikel-ID schlüsseln
  • für jede gefundene Bewertung den Artikel-Eintrag rausholen und die Bewertung dort an eine Bewertungen-Array anpappen.
$warenkorbinhalt = ARRAY();

/* SQL Query 1 ausführen */

while ($artikel = /* row holen, z.B. mysqli_fetch_assoc */)
{
   $artikel['bewertungen'] = ARRAY();    // Array für Bewertungen vorbereiten
   $warenkorbinhalt[$artikel['t1_id']] = $artikel;
}

/* $artikelliste aufbauen */
/* SQL Query 2 ausführen */

while ($bewertung = /* row holen */)
{
   $artikel = $warenkorbinhalt[$bewertung['t1_id']];
   $artikel['bewertungen'][] = $bewertung;
}

Fertig. Und das gibst Du dann so, wie Du es brauchst, als HTML aus.

Rolf

--
sumpsi - posui - obstruxi