selfmade01: Inner Join mit subselect und Limit?

Beitrag lesen

Hallo,

Mithilfe der abfragenden Umgebung kannst du zu einer Lösung kommen. Du kannst die Subquerys aus der Query entfernen. Beim Durchlaufen über die Ergebnismenge der übriggebliebenen Query (motherPlan, breederinfo, bornType) feuerst du für jeden Datensatz je eine Query auf images und information ab. Da muss aber als Bedingung rein, die motherPlanId mit der übergebenen motherPlan-Id aus dem Durchlauf zu vergleichen. Das schränkt deren Ergebnismengen gemäß deinem Beispiel auf die zwei Datensätze passend zur motherPlan-Id ein, das LIMIT nach dem Sortieren lässt dann genau den einen gewünschten übrig. Das "Joinen" musst du dann an der Stelle in deinem Programm machen.

Die Alternative dazu wäre, diesen beschriebenen Vorgang in einer Stored Procedure stattfinden zu lassen. Das wird aber anzunehmenderweise komplettes Neuland für dich sein und eine Menge Lernaufwand erfordern.

wow, ich hatte/habe da wohl einen totalen Denkfehler Noch wäre die Möglichkeit meine Tabellen und das Setzen der ID's anzupassen, weiss nicht ob das klüger wäre.

Der Grund für diese Gestaltung der Tabellen war der, dass ich auf einer Webseite die motherplan mit Basis-Daten fülle und auf der anderen Webseite dann Zusatzinfos eintrage wie ich lade Bilkder hoch und trage Information ein. Damit die Tabelle motherplan nicht ewig im Datensatz und dessen felder lang wird , habe ich die Daten aufgeteilt da ich so die Möglichkeit habe die images-tabelle und die information-tabelle auch von anderen Webseiten also von anderen Tabellen zu nutzen die auch images und informations benötigen.

Ich dachte der Ablauf eines Left Joins und eines Subselect's wäre so.

Es wird alles ausgegeben was in der motherplan also der linken Tabelle steht. So beneötige ich das auch, auch wenn in den ge-jointen tabellen nichts steht. Die Tabellen die maximal nur eine Ergebnismenge pro motherplanId liefern können, left-joine ich mit einem simplen left-join da ich keine Sorge haben muss das auf einmal zuviele doppelte Datensätze mit gleicher id aus der motherplan auftauchen.

da die images und die informations natürlich zu einem Datensatz aus der motherplan beliebig viele informationen und Bilder enthalten können würde ich mit einem normalen Left-Join zuviele Datensätze angezeigt bekommen,

Ich dachte es läuft so

  1. zuerst wird mit dem Hauptselect alles gefunden was in der motherplan steht er findet den ersten Datensatz.
  2. nach dem er den ersten Datensatz der motherplan gefunden hat werden die beiden ersten Left-Joins abgearbeitet und bringen ihr Ergebnis dazu
  3. dann läuft er in den dritten Left-Join und kommt dort in eine schleife da ein subselect dort enthalten ist. Dieser subselect holt sich alle Datensätze und würde die auch ausgeben. nun werden diese Datensätze sortiert und danach limitiert . die Abfrage die im subslect enthalten ist vergelicht hierbei die aus dem Hauptselect der motherplan gefundene motherplan-id. in obigen Beispiel findet dieser subselect also 2 Datensätze und würde durch limit 1 nur einen ausgeben 4 ) mit dem letzten left-Join läuft es genauso wie mit dem unter 3)

Ich stutze gerade deshalb, da wenn ich in den subselects die LIMIT Beschränkung weglasse, dann liefert er ja auch alle Datensätze. Das bedeutet doch das er dort auch alles findet. nur bringt er dann 2 Datensätze pro motherPlanId da ja je zwei Datensätze in der images und information enthalten sind. wieso ich dieses Ergebnis des Subselects  dann mit LIMIT nicht beschränken kann leuchtet mir nicht ein

Grüße Jürgen

Helf mir mal bitte mit welcher Möglichkeit ich das lösen könnte.

Ich wollte eigentlich vermeiden das mit 2-3 verschieden qwuerys zu erschlagen die ich dann via php in einer Schleife vergleiche.

Muss/sollte ich meine db-struktur anders aufbauen?