schwieriger join

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

  • schwieriger join

    hi, es geht um eine anwendung in der man tipps auf formel 1 rennen verwalten können soll.

    folgendes problem:

    ich habe 2 tabellen, eine tb_fahrer und eine tb_tipps..

    tb_fahrer ist eine auflistung aller formel 1 fahrer, also 40 datensätze, mit id und namen, z.B. :
    id name
    1 michael schumacher

    tb_tipps enthält die abgegebenen tipps, mit id, user, rennen, erster, zweiter, dritter.

    unter erster, zweiter, dritter, speicher ich eine Zahl die als Fremdschlüssel auf die tb_fahrer.id referenziert.

    Nun möchte ich beim auslesen, natürlich nicht die nummern der fahrer haben, sondern gleich statt der 1 den "michael schumacher" haben und eben die namen der fahrer.


    ich brauch ein statement das alle nummern der fahrer durch ihren namen ersetzt.

    ich habs mit einem join gemacht, z.B. tb_fahrer inner join tb_tipps on tb_fahrer.id = erster

    aber was ist dann mit "zweiter" und "dritter"

    bitte un hilfe.

  • #2
    Code:
    SELECT *
      FROM tb_tipps t
     INNER JOIN tb_fahrer f1 ON t.erster = f1.id
     INNER JOIN tb_fahrer f2 ON t.zweiter = f2.id
     INNER JOIN tb_fahrer f3 ON t.dritter = f3.id
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      dreifacher inner join

      danke!

      dafür hätte ich noch ewig gebraucht!

      whow!

      Kommentar


      • #4
        Code:
        SELECT t.*, f1.name f1_name, f2.name f2_name, f3.name f3_name
          FROM tb_tipps t
         INNER JOIN tb_fahrer f1 ON t.erster = f1.id
         INNER JOIN tb_fahrer f2 ON t.zweiter = f2.id
         INNER JOIN tb_fahrer f3 ON t.dritter = f3.id
        Mit PHP solltest in der Feldliste mit Aliasen Arbeiten (s.o.) sonst überschreiben sich die Namen gegenseitig ...
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          ja, hab ich. und alles vollqualifiziert. hat wunderbar geklappt.

          thx.

          Kommentar


          • #6
            inzwischen addiert sich der select zu einem echten Monster, geht schon über einige zeilen...

            ich habe nun auch noch eine ergebnistabelle, ähnlich aufgebaut wie die Tipps Tabelle, also ich habe auch spalten erster, zweiter, dritter.

            jetzt möchte ich noch gleich mit diesem select die sätze markieren in denen die Tipps komplett mit dem Ergebnis übereinstimmen, (tip.erster = erg.erster and tip.zweiter = erg.zweiter, tip.dritter = erg.dritter)

            das ich die sätze mit einem if vergleichen kann hab ich rausgefunden, aber alles geht schon schief sobald ich die Ergebnisstabelle noch zusätzlich einbeziehe. dann erscheinen plötzlich alle Datensätze neunfach :O

            bisher:
            PHP-Code:
            Select tip.statustip.event_idfah1.fahrername as ersterName,
            fah2.fahrername as zweiterNamefah3.fahrername as dritterName,
            tip.datumacc_nick 
            from tipps tip 
            inner join userdaten on acc_id 
            f_acc_id 
            inner join wb_fahrer fah1 on fah1
            .id tip.erster 
            inner join wb_fahrer fah2 on fah2
            .id tip.zweiter 
            inner join wb_fahrer fah3 on fah3
            .id tip.dritter 
            order by tip
            .event_id desctip.datum desctip.status desc 
            nachher und hier tritt der fehler auf:
            PHP-Code:
            Select tip.statustip.event_idfah1.fahrername as ersterName,
            fah2.fahrername as zweiterNamefah3.fahrername as dritterName,
            tip.datumacc_nickerg.erstererg.zweitererg.dritter 
            from 
            [B]ergebnisse erg[/B], tipps tip 
            inner join userdaten on acc_id 
            f_acc_id 
            inner join wb_fahrer fah1 on fah1
            .id tip.erster 
            inner join wb_fahrer fah2 on fah2
            .id tip.zweiter 
            inner join wb_fahrer fah3 on fah3
            .id tip.dritter 
            order by tip
            .event_id desctip.datum desctip.status desc 

            danke für hilfe
            Zuletzt geändert von sulay; 23.06.2003, 18:59.

            Kommentar


            • #7
              liegt wahrsc heinlich daran, dass an die ergebnistabelle eine bedingung geknüpft wurde, kann das sein?

              btw: bau doch in deine beiden selects den ein oder anderen zeilenumbruch ein, das kann ja kein mensch lesen
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                weiss nicht was für eine bedingung Du meinst, aber ich weiss jetzt wieso die sätze 9-fach angezeigt werden.
                es liegt daran das in der ergebnistabelle 9 sätze drin stehen, die ergebnisse für alle rennen von melbourne bis zum nürburgring

                Kommentar


                • #9
                  ok, ich habs.

                  ich musste noch auf die event_id joinen damit immer nur ergebnisse und Tipps mit der selben event_id verglichen wurden.

                  thx.

                  Kommentar


                  • #10
                    dieser select:
                    PHP-Code:
                    Select tipps.statustipps.event_idfah1.fahrername as ersterName,fah1.id as tippsErster
                    erg.erster as ergErsterfah2.fahrername as zweiterName,fah2.id as tippsZweiter
                    erg.zweiter as ergZweiter ,fah3.fahrername as dritterNamefah3.id as tippsDritter
                    erg.dritter as ergDrittertipps.datumacc_nick,
                     if(
                    fah1.id erg.erster and fah2.id erg.zweiter and fah3.id erg.dritter,'richtig','falsch') as tippspbewertung 
                    führt zu diesem ergebnis:

                    sulay 9 Michael Schumacher Kimi Räikkönen Rubens Barrichello offen 2003-06-28 12:17:58 falsch
                    bismaster 9 Michael Schumacher Rubens Barrichello Rubens Barrichello offen 2003-06-24 21:26:04 falsch
                    LI 9 Michael Schumacher Kimi Räikkönen Ralf Schumacher offen 2003-06-23 12:13:35 falsch

                    jede zeile steht für einen tipp eines users, in der letzten spalte steht ob der tipp richtig oder falsch war.

                    jetzt möchte ich gerne zählen wie viele richtige Tipps ein User hat ?

                    geht das mit distinct ?
                    ich hab manchmal probleme spalten anzusprechen die ich mit einem alias belegt habe (as tippbewertung)

                    schreibe ich z.b. noch das:
                    PHP-Code:
                    where tippbewertung 'richtig' 
                    sagt er "unknown column"

                    danke für jede hilfe.
                    Zuletzt geändert von sulay; 28.06.2003, 14:20.

                    Kommentar


                    • #11
                      ahh, ok, zählen kann ich die mit count(*). das war einfach

                      aber wieso klappt das mit den aliases nicht immer ?

                      Kommentar

                      Lädt...
                      X