kostenloser Webspace werbefrei: lima-city


Tabellen joinen, aber nicht in eine Zeile

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fchriis

    fchriis hat kostenlosen Webspace.

    Hallo,

    der Titel ist wenig aussagekräftig, ich weis.

    Ich hab folgendes Problem: Ich möchte eine Tabelle in sich selbst joinen, aber es sollen mehrere Datensätze rauskommen, statt das alles in einen kommt. Okay, immernoch nicht aussagekräftig. Meine Abfrage:

    SELECT m1.*, m2.*
    FROM msg m1
    LEFT JOIN msg m2
    ON (m2.parentType = 'msg' AND m2.parentID = m1.messageID)
    WHERE m1.parentType = 'user'


    so, jetzt bekomm ich m1 und m2 allerdings in einem Datensatz zusammen, anstatt getrennt.

    (SELECT m1.*
    FROM msg m1
    LEFT JOIN msg m2
    ON (m2.parentType = 'msg' AND m2.parentID = m1.messageID)
    WHERE m1.parentType = 'user'
    ) UNION (
    SELECT m2.*
    FROM msg m1
    LEFT JOIN msg m2
    ON (m2.parentType = 'msg' AND m2.parentID = m1.messageID)
    WHERE m1.parentType = 'user')


    Funktioniert wie gewollt, sieht aber nicht gerade sauber aus.

    Habt ihr Ideen, wie sich das elegant lösen lässt?

    Vielen Dank
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Mit Inner Join lässt sich das nicht realisieren.

    Du hast das Richtige getan, nämlich den Union genutzt.

    Wobei ich mich frage, wieso du zweimal die gleichen Datensätze untereinander haben möchtest?

    Beitrag zuletzt geändert: 23.2.2011 15:49:54 von sneppa
  4. e******n

    wenn man den Datensatz 2 mal haben möchte, wäre es nicht einfacher den 1. Datensatz in eine Variable zu speichern und einfach 2 mal ausgeben zu lassen, als 2 mal die Datenbank aufzurufen?
  5. Autor dieses Themas

    fchriis

    fchriis hat kostenlosen Webspace.

    sind nich die gleichen Datensätze.
    prinzipiell ruf ich Nachrichten auf und in der selben Abfrage gleich die Kommentare.
    Nachrichten haben ein parentType und eine parentID um sie zuzuordnen
    und Kommentare kommen in die selbe Tabelle, haben nur "msg" als parentType und die messageID als parentID

    nun gut, dann nutz ich wohl Union :) vielen dank
  6. Für Nachricht + Kommentare würde ich generell 2 SQLs machen, wegen der Übersichtlichkeit.

    @fchriis: In dem SQL von dir mit Union wurden beides mal die gleichen Datensätze abgefragt, deswegen die Aussage mit den gleichen Datensätze.

    Beitrag zuletzt geändert: 23.2.2011 16:42:00 von sneppa
  7. Autor dieses Themas

    fchriis

    fchriis hat kostenlosen Webspace.

    An der Stelle ist mir aber Performance wichtiger.
    Die Querys unterscheiden sich nur darin, dass einmal m1.* und einmal m2.* zurückgegeben wird
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!