mehrere SUM() und COUNT() addieren

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

  • #16
    hmmm .. ist das überhaupt ein Outer-Join (Left Join) ? .. sieht mir mehr nach nem EquiJoín aus ...

    dann brauchst du einfach im Select alle Tabellen aufführen und dann ein
    Code:
    WHERE user.user_id=group_bets.user_id AND user.user_id=final_bets.user_id
    im übrigen . was ist so abschreckend die beiden ergebnis-arrays mit dem Script auszuwerten, außer dass die Datenbank das bei korrekter Abfrage ein klitzekleines bißchen schneller schafft....^^
    Zuletzt geändert von eagle275; 27.06.2010, 19:15.
    [font=Verdana]
    Wer LESEN kann, ist klar im Vorteil!
    [/font]

    Kommentar


    • #17
      Zitat von Cappo Beitrag anzeigen
      ich habe unteranderem 2 Tabellen wo jeweils die Tipps (Bets) der User drin stehen...warum 2 Tabellen? in beiden Tabellen sind teilweise verschiedene Attribute (Spalten)...
      Eine Spalte für mit 1 für bet oder 0 für final hätte es nicht getan?

      nun will ich ... Ich brauche dazu also die Gesamtpunkzahl und die Gesamtanzahl der Tipps jedes einzelnen Users.
      UNION!

      Kommentar


      • #18
        Zitat von onemorenerd Beitrag anzeigen
        Eine Spalte für mit 1 für bet oder 0 für final hätte es nicht getan?
        hmm ja wenn ich das gewusst hätte was das für ein Zirkus wird dann hätte ich es wahrscheinlich so gemacht...

        So ha jetzt mal was mit UNION probiert:

        Code:
        (SELECT SUM(final_bet.points) AS sumPoints, final_bet.user_id, user.name, 
        COUNT(final_bet.bet_id) AS sumCount FROM final_bet 
        LEFT JOIN user
        ON final_bet.user_id = user.user_id
        GROUP BY final_bet.user_id)
        UNION
        (SELECT SUM(group_bet.points) AS sumPoints, group_bet.user_id,
        user.name, COUNT(group_bet.bet_id) AS sumCount FROM group_bet 
        LEFT JOIN user
        ON group_bet.user_id = user.user_id
        GROUP BY group_bet.user_id)
        ORDER BY sumPoints DESC
        [COLOR=Red][B]GROUP BY user_id[/B][/COLOR]
        Ohne GROUP BY am Schluss kriege ich die Gesamtpunktzahl und die Anzahl aller Tipps jedes einzelnen Users...allerdings ist jeder User zweimal vorhanden (wegen den 2 SELECT's). Also hab ich einmal die Ergebnisse der "group_bet" und einmal die Ergebnisse der "final_bet"...nun wollte ich die Beiden jeweils zusammenfassen (mit [COLOR=Red]GROUP BY user_id[COLOR=Black]) allerdings sagt er mir dann:

        [/COLOR][/COLOR]
        Code:
        #1064 - You have an error in your SQL syntax; check the manual that 
         corresponds to your MySQL server version for the right syntax to use  near 'GROUP BY user_id' at line 11

        Kommentar


        • #19
          hmm.. [Zitat]UNION-Syntax

          SELECT ...
          UNION [ALL]
          SELECT ...
          [UNION
          SELECT...]
          Die SELECT Befehle sind normale Abfragen mit folgender Einschränkung:

          - nur der letzte SELECT-Befehl darf INTO OUTFILE enthalten
          - nur der letzte SELECT-Befehl darf ORDER BY enthalten

          OHNE das Schlüsselwort ALL sind alle zurückgegebenen Datensätze eindeutig (unique) so, als hätten Sie ein DISTINCT für den gesamten Ergebnissatz ausgeführt...
          [/Zitat]

          das dürfte deine Fehlermeldung erklären - das Union selbst darf nicht Group / Order haben, sondern nur die Selects - und da halt nur das letzte..
          es wundert mich allerdings dass du 2 Ergebnisse für den User bekommst - sieht danach aus, als ob deine Selects noch nicht so gut sind ..
          [font=Verdana]
          Wer LESEN kann, ist klar im Vorteil!
          [/font]

          Kommentar


          • #20
            JETZT GEHTS!

            Endlich...danke an meinen Arbeitskollegen...er hat mir geholfen und folgendes vorgeschlagen (mit VIEW):

            Code:
            CREATE VIEW `userpoints`
            AS (SELECT SUM(final_bet.points) AS sumPoints, final_bet.user_id, user.name, 
            COUNT(final_bet.bet_id) AS sumCount FROM final_bet 
            LEFT JOIN user
            ON final_bet.user_id = user.user_id
            GROUP BY final_bet.user_id)
            UNION
            (SELECT SUM(group_bet.points) AS sumPoints, group_bet.user_id, user.name, 
            COUNT(group_bet.bet_id) AS sumCount FROM group_bet 
            LEFT JOIN user
            ON group_bet.user_id = user.user_id
            GROUP BY group_bet.user_id)
            ORDER BY sumPoints DESC
            
            SELECT SUM(sumCount) AS finalcount, SUM(sumPoints) AS finalpoints, user_id, name FROM userpoints
            GROUP BY user_id
            ORDER BY finalpoints DESC, finalcount DESC
            Danke an euch trotzdem für eure Hilfe und euren Einsatz!

            MfG
            David

            Kommentar

            Lädt...
            X