Problem mit komplexen joins unter mysql!

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

  • Problem mit komplexen joins unter mysql!

    Ich habe folgendes Problem, ich habe den SQL String mit ACCESS erstellt da er etwas komplizierter wird, nur leider funktioniert er nur dort einwandfrei, wenn ich ihn auf meine MYSQL DB anwenden will bekomme ich:
    Warning: Supplied argument is not a valid MySQL result resource in xxx

    Habe schon einiges ausprobiert mittlerweile und weiß net mehr weiter:

    mysql_query("SELECT Sum(trainer_spieler_karten.gelb) AS Summevongelb, Sum(trainer_spieler_karten.gelb_rot) AS Summevongelb_rot, Sum(trainer_spieler_karten.rot) AS Summevonrot, trainer_tabellen.mannschaftsname, trainer_main.user_id, ((Sum(([gelb]+([gelb_rot]*3)+([rot]*5))))/([gewonnen]+[unentschieden]+[verloren])) AS ProSpiel, [gewonnen]+[unentschieden]+[verloren] AS Spiele

    FROM trainer_main LEFT JOIN (trainer_spieler_karten RIGHT JOIN trainer_tabellen ON trainer_spieler_karten.team_id = trainer_tabellen.team_ID) ON trainer_main.user_id = trainer_tabellen.user_id

    WHERE (((trainer_main.land)="Deutschland") AND ((trainer_main.liga)=1) AND ((trainer_spieler_karten.saison)=1) AND ((trainer_spieler_karten.spielart)="liga"))

    GROUP BY trainer_tabellen.mannschaftsname, trainer_main.user_id, [gewonnen]+[unentschieden]+[verloren]

    ORDER BY ((Sum(([gelb]+([gelb_rot]*3)+([rot]*5))))/([gewonnen]+[unentschieden]+[verloren])) DESC");

    Vielleicht weiß ja jemand Rat!?

  • #2
    Re: Problem mit komplexen joins unter mysql!

    Original geschrieben von oli007
    Warning: Supplied argument is not a valid MySQL result resource in xxx
    wie oft sollen wir es noch sagen, hinter jedes mysql_query() gehört ein or die(mysql_error()), zumindest in der testphase.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      das ist ja schön und gut, nur die frage ist doch warum geht es nicht?

      ich brauch die abfrage doch sonst geht die ausgabe doch nicht!
      alle felder sind existent habe sie überprüft etc

      Kommentar


      • #4
        Nachtrag:

        Folgendes steht dann da als error Meldung

        You have an error in your SQL syntax near 'FROM trainer_main LEFT JOIN (trainer_spieler_karten RIGHT JOIN trainer_tabellen ' at line 3

        Kommentar


        • #5
          Original geschrieben von oli007
          das ist ja schön und gut, nur die frage ist doch warum geht es nicht?
          und GENAU DESHALB solltst du ja auch das mysql_error() verwenden.

          und jetzt poste noch deine komplette query (bitte code-tags dazu verwenden ) damit wir mal den syntax checken können.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Ok der Code nochmal:

            Code:
             
            ....
            $sql3 = mysql_query($test="
            SELECT Sum(trainer_spieler_karten.gelb) AS Summevongelb, Sum(trainer_spieler_karten.gelb_rot) AS Summevongelb_rot, Sum(trainer_spieler_karten.rot) AS Summevonrot, trainer_tabellen.mannschaftsname, trainer_main.user_id, ((Sum((trainer_spieler_karten.gelb+(trainer_spieler_karten.gelb_rot*3)+(trainer_spieler_karten.rot*5))))/(trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren)) AS ProSpiel, trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren AS Spiele
            
            FROM trainer_main LEFT JOIN (trainer_spieler_karten RIGHT JOIN trainer_tabellen ON trainer_spieler_karten.team_id = trainer_tabellen.team_ID) ON trainer_main.user_id = trainer_tabellen.user_id
            
            WHERE (((trainer_main.land)='Deutschland') AND ((trainer_main.liga)=1) AND ((trainer_spieler_karten.saison)=1) AND ((trainer_spieler_karten.spielart)='liga'))
            
            GROUP BY trainer_tabellen.mannschaftsname, trainer_main.user_id, trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren
            
            ORDER BY ((Sum((trainer_spieler_karten.gelb+(trainer_spieler_karten.gelb_rot*3)+(trainer_spieler_karten.rot*5))))/(trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren)) DESC")
            or die(mysql_error());
            
            echo 'TESTSQL:'.$test.'<br><br>';
            
            while((list($Summevongelb)=mysql_fetch_row($sql3)))
            {...
            Der Fehler:
            You have an error in your SQL syntax near '(trainer_spieler_karten RIGHT JOIN trainer_tabellen ON trainer_spieler_karten.te' at line 3

            Kommentar


            • #7
              probier mal
              Code:
              FROM trainer_main 
              	LEFT JOIN trainer_tabellen 
              	  USING (user_id)
              		LEFT JOIN trainer_spieler_karten 
              		  ON trainer_spieler_karten.team_id = trainer_tabellen.team_ID
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Dann erhalte ich diesen Fehler hier:

                Invalid use of group function

                Gehen Innerjoins und leftjoins in mysql eigentlich?

                Kommentar


                • #9
                  Original geschrieben von oli007
                  Gehen Innerjoins und leftjoins in mysql eigentlich?
                  natürlich. sonst hätte happy diese ja auch nicht im beispiel verwendet.

                  und nun zu der fehlermeldung .....

                  so wie ich das sehe, hast du happy's demo nicht 1:1 verwendet.

                  teste das bitte 1:1, wenn man dir schon einen vorschlag gibt.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Habe das 1:1 übernommen und in den query eingebaut:

                    Code:
                    SELECT Sum(trainer_spieler_karten.gelb) AS Summevongelb, Sum(trainer_spieler_karten.gelb_rot) AS Summevongelb_rot, Sum(trainer_spieler_karten.rot) AS Summevonrot, trainer_tabellen.mannschaftsname, trainer_main.user_id, ((Sum((trainer_spieler_karten.gelb+(trainer_spieler_karten.gelb_rot*3)+(trainer_spieler_karten.rot*5))))/(trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren)) AS ProSpiel, trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren AS Spiele
                    
                    FROM trainer_main LEFT JOIN trainer_tabellen USING (user_id) LEFT JOIN trainer_spieler_karten ON trainer_spieler_karten.team_id = trainer_tabellen.team_ID
                    
                    WHERE (((trainer_main.land)='Deutschland') AND ((trainer_main.liga)=1) AND ((trainer_spieler_karten.saison)=1) AND ((trainer_spieler_karten.spielart)='liga'))
                    
                    GROUP BY trainer_tabellen.mannschaftsname, trainer_main.user_id, trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren
                    
                    ORDER BY ((Sum((trainer_spieler_karten.gelb+(trainer_spieler_karten.gelb_rot*3)+(trainer_spieler_karten.rot*5))))/(trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren)) DESC
                    trotzdem kommt die fehlermeldung :-(

                    Kommentar


                    • #11
                      bei WHERE und ORDER BY darfst du keine berechnungen anstellen.

                      ich habe mal deine query formatiert, umgeschrieben und happy's ansatz eingebracht.

                      zusätzlich habe ich WHERE und ORDER BY angepasst.

                      Code:
                      SELECT
                          SUM(trainer_spieler_karten.gelb) AS Summevongelb,
                          SUM(trainer_spieler_karten.gelb_rot) AS Summevongelb_rot,
                          Sum(trainer_spieler_karten.rot) AS Summevonrot,
                          trainer_tabellen.mannschaftsname,
                          trainer_main.user_id,
                          ((Sum((trainer_spieler_karten.gelb+(trainer_spieler_karten.gelb_rot*3)+(trainer_spieler_karten.rot*5))))/(trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren)) AS ProSpiel,
                          trainer_tabellen.gewonnen+trainer_tabellen.unentschieden+trainer_tabellen.verloren AS Spiele
                      
                      FROM trainer_main 
                      	LEFT JOIN trainer_tabellen 
                      	  USING (user_id)
                      		LEFT JOIN trainer_spieler_karten ON (trainer_spieler_karten.team_id = trainer_tabellen.team_ID)
                      
                      WHERE
                          trainer_main.land='Deutschland' AND
                          trainer_main.liga=1 AND
                          trainer_spieler_karten.saison=1 AND
                          trainer_spieler_karten.spielart='liga'
                      
                      GROUP BY
                          trainer_tabellen.mannschaftsname,
                          trainer_main.user_id,
                          Spiele
                      
                      ORDER BY
                          ProSpiel DESC
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Vielen Dank!

                        Das mit der "Nichtberechnung" in group und order by war wohl der entscheidende Tipp, das war mir bislang nicht klar :-)!

                        Man lernt nie aus, danke also!

                        Kommentar

                        Lädt...
                        X