Rolf B: mysql - 2 Queries oder doch eine?

Beitrag lesen

Hallo Jörg,

Ich hoffe, ich habe in der Geschichte keine Unlogik eingebaut

Ich verstehe sie nicht.

Aus deinen Beschreibungen lese ich dieses Datenmodell heraus (erstellt mit dbdiagram.io):

Ist das so richtig? Insbesondere die Kardinalitäten? Du beschreibst zwischen Table1 und Table4 eine m:n Beziehung und verwendest sie auch in der Query. Table1 scheint aber zu Table2 in einer 1:n Beziehung zu stehen.

Insbesondere komme ich nicht damit klar, warum table2 und table4 Vorgänge enthalten und warum table4 überhaupt in der Query ist, wenn doch der User Vorgänge aus Table2 auswählt und die weiteren Vorgänge auch nur aus Table2 kommen sollen.

Und dann das hier:

Sollte ein Artikel inzwischen gelöscht sein (m.del=1), dafür aber bereits ein Tabelle2-Vorgang existent, soll dieser trortdem ganz normal angezeit werden.

Error: duplicate reference at rolfb.cmd:34677642[1]

Ich will damit fragen, ob das fett gesetzte dieser der Artikel oder der Vorgang ist.

Aber wie auch immer - ich würde bezweifeln, dass es sinnvoll ist, all das in eine JOIN Query zu packen. Durch die Joins entstehen jede Menge Kombinationen zwischen Artikeln und Vorgängen, so dass Du nachher - mutmaßlich - jede Menge redundante Daten im Ergebnis hast die Du dann im Programmcode wieder deduplizieren musst. Ein UNION ist auch so eine Sache, du kannst nicht Artikel und Vorgänge mit UNION zusammenpacken, weil ein Union strukturelle Gleichheit vorausetzt.

Wenn Du vom User eine Vorgangs-ID als Einstieg bekommts, wären zwei bis drei Queries vermutlich besser. Die erste bestimmt die Artikel zum Vorgang, und die zweite alle Vorgänge, die mit diesen Artikeln in Beziehung stehen. Ob der zweite Schritt in einer Query oder in zweien gemacht werden muss, hängt davon ab, ob table2 und table4 strukturgleich sind. Wenn ja, kann man einen UNION machen. Wenn nein, kann man es vielleicht geschickt zusammenfügen. Vielleicht.

Rolf

--
sumpsi - posui - obstruxi>

  1. Abgeleitet von: Für die einen ist es Windows, für die anderen die größte und langsamste Batchdatei der Welt 🤣 ↩︎