LEFT JOIN Unterabfrage Bezug auf oberste Tabelle

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

  • LEFT JOIN Unterabfrage Bezug auf oberste Tabelle

    Hallo Leute,

    habe folgende Abfrage:
    PHP-Code:
    SELECT a1.*, a2.anz_aktionenUNIX_TIMESTAMP(a1.datum) AS datum_tst.name AS teilnehmer_namet.vorname AS teilnehmer_vornamet.id AS teilnehmer_id
    FROM Aktionen a1
        INNER JOIN Teilnehmer t
            ON a1
    .ref_teilnehmer_id t.id
        LEFT JOIN 
    (
            
    SELECT a.ref_teilnehmer_idCOUNT(a.ref_teilnehmer_id) AS anz_aktionen
            FROM Aktionen a
            WHERE a
    .schleuse 0
                
    AND a.typ a1.typ
            GROUP BY a
    .ref_teilnehmer_id
        
    a2
            ON a1
    .ref_teilnehmer_id a2.ref_teilnehmer_id
    WHERE a1
    .schleuse 1
    ORDER BY a1
    .datum DESCt.name ASC 
    Hier kommt folgender Fehler:
    #1054 - Unknown column 'a1.typ' in 'where clause'

    Wie kann ich auf a1.typ von der äußersten Tabelle zugreifen?

    Hier die Tabelle:
    PHP-Code:
    CREATE TABLE `aktionen` (
      `
    idint(10unsigned NOT NULL auto_increment,
      `
    ref_teilnehmer_idint(10unsigned NOT NULL,
      `
    ref_termin_idint(10unsigned NOT NULL,
      `
    typint(10unsigned NOT NULL,
      `
    schleusetinyint(3unsigned NOT NULL default '1',
      `
    datumtimestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      
    PRIMARY KEY  (`id`),
      
    KEY `Aktionen_FKIndex1` (`ref_termin_id`,`ref_teilnehmer_id`)
    ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 
    Vielen Dank für Eure Hilfe.

    Gruß
    Sven.

  • #2
    Warum führst du keinen normalen LEFT JOIN auf die Tabelle aus?
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Auf welche Tabelle?
      Wie meinst du das???

      Kommentar


      • #4
        Hi,

        du kannst nicht nach innen Abfragen! Du musst alle Datensätze, die du für die Verabeitung "außen" brauchst mit SELECT nach außen bringen!

        Das Problem ist eher, dass du von der Inneren Tabelle nach außen zugreifen willst:
        von a willst du a1.typ erreichen und das geht nicht!

        Versuche außerdem SubSelects zu vermeiden, da diese von manchen Providern verboten werden (z.B 1&1).

        Versuche einen normalen LEFT JOIN mit einer ganzen Tabelle zu machen. Ich glaube, dass Dein SubSelect überflüssig ist!

        greetz Flip
        Find Parties?
        Partysuche

        Kommentar


        • #5
          Auf welche Tabelle? Wie meinst du das???
          Auf die Tabelle anz_aktionen ohne Subselect.
          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

          Kommentar


          • #6
            Original geschrieben von Flip7

            Versuche außerdem SubSelects zu vermeiden, da diese von manchen Providern verboten werden (z.B 1&1).
            Da würde ich dann lieber ganz rasch den Provider wechseln! Es gibt keinen einzigen Grund, Subselects zu verbieten.

            Zurück aber zum Problem: Ich glaube nicht, dass das mit einem einfachen JOIN zu lösen ist. Aber da Aggregatsfunktionen und GROUP BY im Spiel sind, glaube ich, dass das überhaupt nicht in einer Abfrage zu lösen ist. Du willst einerseits die Daten zu den einzelen Aktionen und Teilnehmern haben, aber andererseits auch die Anzahl Aktionen pro Teilnehmer und da sehe ich nicht, wie die korrekte Beziehung hergestellt werden kann.
            Gruss
            H2O

            Kommentar


            • #7
              @Flip7: Webserver, Datenbankserver etc. läuft alles intern auf unseren eigenen Server(n), von daher darf ich mich ruhig austoben.

              Hmmm...
              Meine momentane Abfrage liefert mir zu jedem Teilnehmer die Anzahl aller Aktionen (egal welcher Typ), welche nicht in der Schleuse sind (schleuse = 0).

              Ich will aber nur die Aktionen zählen, die vom gleichen Typ sind...
              Im Anhang seht ihr ein Bild der Seite.

              Hier werden auch die Aktionen z.B. "Posteinladung", welche unter der Seite Aktionen (schleuse = 1) zu finden ist, auch mit gezählt. Also der Typ ist nicht in der Abfrage mit drinnen...

              Hier meine momentane Abfrage:
              PHP-Code:
              SELECT a1.*, a2.anz_aktionenUNIX_TIMESTAMP(a1.datum) AS datum_tst.name AS teilnehmer_namet.vorname AS teilnehmer_vornamet.id AS teilnehmer_id
              FROM Aktionen a1
                  INNER JOIN Teilnehmer t
                      ON a1
              .ref_teilnehmer_id t.id
                  LEFT JOIN 
              (
                      
              SELECT ref_teilnehmer_idCOUNT(*) AS anz_aktionen
                      FROM Aktionen
                      WHERE schleuse 
              0
                      GROUP BY ref_teilnehmer_id
                  
              a2
                      ON a1
              .ref_teilnehmer_id a2.ref_teilnehmer_id
              WHERE a1
              .schleuse 1
              ORDER BY a1
              .datum DESCt.name ASC 
              Für einen Lösungsansatz wäre ich sehr dankbar...
              Angehängte Dateien

              Kommentar


              • #8
                Für alle die es interessiert, ich habe es jetzt doch hinbekommen:
                PHP-Code:
                SELECT a1.*, a2.anz_aktionenUNIX_TIMESTAMP(a1.datum) AS datum_tst.name AS teilnehmer_namet.vorname AS teilnehmer_vornamet.id AS teilnehmer_id
                FROM Aktionen a1
                    INNER JOIN Teilnehmer t
                        ON a1
                .ref_teilnehmer_id t.id
                    LEFT JOIN 
                (
                        
                SELECT ref_teilnehmer_idtypCOUNT(*) AS anz_aktionen
                        FROM Aktionen
                        WHERE schleuse 
                0
                        GROUP BY ref_teilnehmer_id
                typ
                    
                a2
                        ON a1
                .ref_teilnehmer_id a2.ref_teilnehmer_id
                            
                AND a1.typ a2.typ
                WHERE a1
                .schleuse 1
                ORDER BY a1
                .datum DESCt.name ASC 
                Danke für Eure Hilfe!

                Kommentar

                Lädt...
                X