Left join verhindert Ergebnis

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Left join verhindert Ergebnis

    Hallo zusammen,

    in meinem Query verwende ich ein Left join. Bisher hatte ich immer gedacht, dass ein Left join das "Hauptergebnis" nicht beeinflusst. Nun ist es aber so, dass wenn ich das Left join rauslasse, ein Ergebnis erscheint, mit aber nicht...

    PHP-Code:
    SELECT *, GROUP_CONCAT(DISTINCT Ebene,' - ',Name ORDER BY Ebene,Name
     SEPARATOR 
    '<br>') AS RaeumeGROUP_CONCAT(DISTINCT '<img src="images/'Typ'.gif" style="margin-right: 8px;">',
    Einschraenkung ORDER BY Einschraenkung SEPARATOR '<br>') AS
     
    Einschraenkungen2801_konflikte.id_konflikte AS id_konflikte FROM
     2801_konflikte
    2801_benutzer2801_raeume2konflikte2801_raeume LEFT
     JOIN 2801_einschraenkungen2konflikte
    2801_einschraenkungen ON 
    2801_einschraenkungen2konflikte
    .id_konflikte 2801_konflikte.id_konflikte AND
     
    2801_einschraenkungen2konflikte.id_einschraenkungen 
    2801_einschraenkungen.id_einschraenkungen WHERE 
    2801_raeume2konflikte
    .id_konflikte 2801_konflikte.id_konflikte AND
     
    2801_raeume2konflikte.id_raeume 2801_raeume.id_raeume AND 
    2801_benutzer.id_benutzer 2801_konflikte.id_benutzer GROUP BY 
    2801_konflikte
    .id_konflikte ORDER BY Startzeit 
    Hat hier jemand eine Idee?

    DANKE!

    strauberry

  • #2
    Re: Left join verhindert Ergebnis

    Original geschrieben von strauberry

    Hat hier jemand eine Idee?
    Ja, Grundlagen lernen! Schau dir den Syntax von JOIN nochmals an, und http://www.php-resource.de/forum/sho...threadid=50454 da stehen einige Tips in Umgang mit Fehlerbehandlung drin

    Kommentar


    • #3
      Ok, dann versuche ich mal meine "Ergebnisse" aus deinem Post aufzuschreiben:

      Keine Ergebnisse heißt: myqsl_num_rows = 0
      Es erscheint keine Fehler, er findet nur einfach keine Datensätze.

      Bisher hatte ich Left join folgendermaßen verstanden: Tabelle Mitarbeiter und Tabelle Mitarbeiterdetails.

      PHP-Code:
      SELECT FROM MitarbeiterDetails WHERE Mitarbeiter.ID Details.ID 
      Ließt nur die Mitarbeiter aus, zu denen es Details gibt

      PHP-Code:
      SELECT FROM Mitarbeiter LEFT JOIN Details ON Mitarbeiter.ID Details.ID 
      Ließt ALLE(!) Mitarbeiter aus und zeigt zu dem MA, wo es Details gibt, welche an. Bei den anderen steht NULL in den Details.

      Die zweite Variante brauche ich: Alle Konflikte auslesen (2801_konflikte) die zu bestimmten Kriterien passen (Raeume, benutzer). Falls es zu dem Konflikt Einschränkungen gibt, diese auslesen. Wenn es keine gibt, den Konflikt trotzdem anzeigen...

      Irgendwie steh ich jetzt auf dem Schlauch

      Kommentar


      • #4
        OK, für blinde

        nach dem Wort JOIN kommt eine Tabelle dann muss die dazugehörige Bedingung mit dem reserviertes Wort ON folgen. Schau dir also deine Abfrage mal an

        Kommentar


        • #5
          Ok Das Problem ist: die einschraenkungen2konflikte ist eine n:m-Tabelle... und die m's muss ich ja auch auslesen

          Hab gerade aber eine Eingebung gehabt: Nimm zwei Left join und sei glücklich

          PHP-Code:
          SELECT *, GROUP_CONCAT(DISTINCT Ebene,' - ',Name ORDER BY Ebene,Name 
          SEPARATOR 
          '<br>') AS RaeumeGROUP_CONCAT(DISTINCT '<img src="images/',
           
          Typ'.gif" style="margin-right: 8px;">'Einschraenkung ORDER BY 
          Einschraenkung SEPARATOR 
          '<br>') AS Einschraenkungen
          2801_konflikte.id_konflikte AS id_konflikte FROM 2801_konflikte2801_benutzer,
           
          2801_raeume2konflikte2801_raeume LEFT JOIN 
          2801_einschraenkungen2konflikte ON 
          2801_einschraenkungen2konflikte
          .id_konflikte 2801_konflikte.id_konflikte LEFT
           JOIN 2801_einschraenkungen ON 
          2801_einschraenkungen2konflikte
          .id_einschraenkungen 
          2801_einschraenkungen.id_einschraenkungen WHERE 
          2801_raeume2konflikte
          .id_konflikte 2801_konflikte.id_konflikte AND 
          2801_raeume2konflikte.id_raeume 2801_raeume.id_raeume AND 
          2801_benutzer.id_benutzer 2801_konflikte.id_benutzer GROUP BY 
          2801_konflikte
          .id_konflikte ORDER BY Startzeit 

          Kommentar


          • #6
            Original geschrieben von strauberry

            Hab gerade aber eine Eingebung gehabt: Nimm zwei Left join und sei glücklich
            und das macht man auch

            btw: deine Abfrage liefert eine Unmenge an Daten, ist das so gewollt? Denn Cross Join fast über alle Tabellen ist sehr ungewöhnlich und vor allem sehr unperformant.

            Kommentar


            • #7
              Mir ist hier bisher leider keine bessere Lösung eingefallen... wahrscheinlich ist meine DB Struktur Müll

              Welche Arten gibt es denn noch, viele Tabellen zu verknüpfen?

              Kommentar

              Lädt...
              X