Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL SELECT oder Unterabfrage?

Einklappen

Neue Werbung 2019

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

  • SQL SELECT oder Unterabfrage?

    Hallo liebe Leute,

    ich habe folgendes Problem, in einer Tabelle habe ich Datensätze, die enthalten nun auch zwei verschiedene Ids von ein und derselben anderen Tabelle.
    Nun ist es relative einfach die Daten von Tabelle 2 auszugeben.
    ich zeige mal etwas davon:
    PHP-Code:
    SELECT
    `id_An`, `id_rennen`, `id_teiln`, `id_teiln2`, `Tran`, `Tran2`, `Zahlart`,
    `
    Pfand`, `Stat`, `Startnummer`, `time`, `Preis`, `Name`, `Vorname`,
    `
    UCIcode`,`Geschlecht`,`Jahrgang`,`mannschaft`,`team_id`,`Transponder`
    FROM `anmeldung_paar`
    JOIN rennen ON anmeldung_paar.id_rennen rennen.id
    JOIN user ON anmeldung_paar
    .id_teiln user.id
    JOIN team 
    AS T1 ON user.Team_id T1.id
    WHERE id_rennen 
    '84' AND id_teiln'348' 
    Nun möchte ich auch gleich alle Daten zu `id_teiln2` aus `user`abrufen. Wie stelle ich das an ohne ein ambigious zu bekommen? Was ich meine ist:

    PHP-Code:
    JOIN user ON anmeldung_paar.id_teiln user.id 
    .
    doch wie setze ich diese Abfrage hinzu? Meine Ansätze bringen keinen Erfolg .

    Danke im Voraus!

  • #2
    Gibt bei den Spaltennamen immer an, von welcher Tabelle der Wert stammt. Um das Ganze übersichlichter zu gestalten, kannst du auch Aliases verwenden.

    Code:
    SELECT t1.foo, t2.bar
    FROM table1 t1
    INNER JOIN table2 t2 ON ( t2.fk_id = t1.id )

    Kommentar


    • #3
      Oder sollte ich 2 seperate Abfragen erzeugen?

      Kommentar


      • #4
        Wenn es um ein "Team" geht, dann kannst du doch mittels Alias,wie hellbringer sagt, beide "Teilnehmer" dagegen joinen ...

        PHP-Code:
        SELECT
        `id_An`, `id_rennen`, `id_teiln`, `id_teiln2`, `Tran`, `Tran2`, `Zahlart`,
        `
        Pfand`, `Stat`, `Startnummer`, `time`, `Preis`, user1.`Name` as Name1user1.`Vorname` as Vorname1,user2.`Name` as Name2user2.`Vorname` as Vorname2,
        `
        UCIcode`,`Geschlecht`,`Jahrgang`,`mannschaft`,`team_id`,`Transponder`
        FROM `anmeldung_paar`
        JOIN rennen ON anmeldung_paar.id_rennen rennen.id
        JOIN user 
        AS user1 ON anmeldung_paar.id_teiln user1.id
        JOIN user 
        AS user2 ON id_teiln2 user2.id
        JOIN team 
        AS T1 ON user.Team_id T1.id
        WHERE id_rennen 
        '84' AND id_teiln'348' 
        evtl musst du bei den Spalten noch mehr mit user1. bzw user2. den jeweilgen Tabellen zuordnen .. und auch dort Alias zuweisen, damit PHP die auseinander halten kann

        Kommentar


        • #5
          Danke für den Hinweis. ich habe es auch geändert und die Abfrage funktioniert, doch sie liefert ein leeres Ergebnis. Was ich nun garnicht verstehe. Egal welche id_An ich aufrufe.
          PHP-Code:
          SELECT
          `id_An`,
          `
          id_rennen`,
          `
          id_teiln`,
          `
          id_teiln2`,
          `
          Tran`,
          `
          Tran2`,
          `
          Zahlart`,
          `
          Pfand`,
          `
          Stat`,
          `
          Startnummer`,
          `
          time`,
          `
          Preis`,
          T1.Name AS Name1,
          T2.Name As Name2,
          T1.Vorname AS Vorname1,
          T2.Vorname AS Vorname2,
          T1.UCIcode AS UCI1,
          T2.UCIcode AS UCI2,
          T1.Geschlecht AS Gesch1,
          T2.Geschlecht AS Gesch2,
          T1.Jahrgang AS Jahr1,
          T2.Jahrgang AS Jahr2,
          T1.Transponder AS Trans1,
          T2.Transponder AS Trans2,
          T3.mannschaft AS Team1,
          T4.mannschaft AS Team2

          FROM 
          `anmeldung_paar`
          JOIN `rennenON anmeldung_paar.id_rennen rennen.id
          JOIN 
          `user` AS T1 ON anmeldung_paar.id_teiln T1.id
          JOIN 
          `user` AS T2 ON anmeldung_paar.id_teiln2t2.id
          JOIN 
          `team` AS T3 ON T1.Team_id T3.id
          JOIN 
          `team` AS T4 ON T2.Team_id T2.id
          WHERE 
          `id_An` = 

          Kommentar


          • #6
            gibt es für Datenbanken eine Fehlersuche bei Datensätzen? Weil ehrlich wenn ich die Abfragen trennen und den zweiten mit einem seperaten query abfrage aus idteiln2 läuft es super. Mich stört halt es sieht nicht gut aus und ich kann es nicht leiden wenn so etwas passiert.

            Kommentar


            • #7
              ich denke mal, deine letzte Join-Condition ist für den Eimer.

              Kommentar


              • #8
                Ha es war wohl ein Schreibfehler. Ich habe es jetzt geändert und die Alias eindeutiger gemacht. und es funktioniert. Danke euch für die Tipps. hier die Lösung für den Nächsten mit dem Problem:
                PHP-Code:
                SELECT
                `id_An`,
                `
                id_rennen`,
                `
                id_teiln`,
                `
                id_teiln2`,
                `
                Tran`,
                `
                Tran2`,
                `
                Zahlart`,
                `
                Pfand`,
                `
                Stat`,
                `
                Startnummer`,
                `
                time`,
                `
                Preis`,
                User1.Name AS Name1,
                User2.Name As Name2,
                User1.Vorname AS Vorname1,
                User2.Vorname AS Vorname2,
                User1.UCIcode AS UCI1,
                User2.UCIcode AS UCI2,
                User1.Geschlecht AS Gesch1,
                User2.Geschlecht AS Gesch2,
                User1.Jahrgang AS Jahr1,
                User2.Jahrgang AS Jahr2,
                User1.Transponder AS Trans1,
                User2.Transponder AS Trans2,
                Team1.mannschaft AS Mannschaft1,
                Team2.mannschaft AS Mannschaft2

                FROM 
                `anmeldung_paar`
                JOIN `rennenON anmeldung_paar.id_rennen rennen.id
                JOIN 
                `user` AS User1 ON anmeldung_paar.id_teiln User1.id
                JOIN 
                `user` AS User2 ON anmeldung_paar.id_teiln2User2.id
                JOIN 
                `team` AS Team1 ON User1.Team_id Team1.id
                JOIN 
                `team` AS Team2 ON User2.Team_id Team2.id
                WHERE id_An
                11 

                Kommentar


                • #9
                  was ist id_An ? die stand in der ursprünglichen Abfrage NICHT DRIN !

                  es wäre für uns erheblich leichter, wenn du mal GRUNDSÄTZLICH darlegst, was du eigentlich bezweckst - und was WAS ist in den Tabellen ...

                  Kommentar


                  • #10
                    Das ist die ID des Datensatzes. Ich hatte in der Zwischenzeit etwas weiter gearbeitet. Also ich rufe an einer anderen Stelle eine ähnliche Tabelle ab, die Teilnehmer an einer Veranstaltung anzeigt, die hat einen Button "bearbeiten" hat. Bisher hat das Formular es über die id_teiln gesucht, da ich das Formular auch an anderer Stelle nutze. Nun habe ich das geändert und suche die id des Datensatzes direkt und nicht über Teilnehmer.
                    Nun hat der Admin die Möglichkeit den Status der Teilnehmer/ Teams zu ändern. Daher die Abfrage und ich wollte keine zwei Abfragen erstellen. Es hat mir sehr geholfen und ich kann nun das Script auch an anderer Stelle übersichtlicher machen.

                    Kommentar

                    Lädt...
                    X