MySQL - Punkte aus 2 Tabellen holen und aufsummiere

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

  • MySQL - Punkte aus 2 Tabellen holen und aufsummiere

    Ich habe folgendes vor:

    Ich habe insgesamt 3 Tabellen:
    - user
    - rewards1
    - rewards2


    reward1 und reward2 sind verschiedene Vergütungsarten, die auch so ohne weiteres nicht zusammengefasst werden könne.

    Beide haben aber eins gemeinsam: die Spalte "points"

    Nun würde ich gerne zu jedem User die Gesamtpunktzahl auslesen. Doch da stehe ich derzeit auf dem Schlauch.

    Wenn ich nur eine Reward-Tabelle abfragen würde, bekomme ich es hin:
    Code:
    Code:
    SELECT u.username, SUM(r.points) FROM 
    users AS u 
    LEFT JOIN `reward1` AS r ON u.uid=r.userid 
    GROUP BY u.uid ORDER BY SUM(r.points)
    Doch ich möchte nicht die zweite Tabelle auch noch mit einbeziehen UND eine korrekte Sortierung erhalten.
    Dann könnte eine Tabelle so aussehen:
    1. Username1 1.222 Punkte (zusammengesetzt aus reward1 und reward2)
    2. Username2 1.002 Punkte (zusammengesetzt aus reward1 und reward2)
    3. Username3 400 Punkte (zusammengesetzt aus reward1 und reward2)

  • #2
    Hallo,

    Zitat von jazzdee Beitrag anzeigen
    Doch ich möchte nicht die zweite Tabelle auch noch mit einbeziehen UND eine korrekte Sortierung erhalten.
    warum möchtest du das nicht? Ich denke, darum geht es im Grunde.

    Was spricht gegen das hier?:

    Code:
    SELECT
        u.username,
        SUM(r1.points) + SUM(r2.points) AS points
    FROM users AS u 
    LEFT JOIN reward1 AS r1 ON u.uid=r1.userid 
    LEFT JOIN reward2 AS r2 ON u.uid=r2.userid 
    GROUP BY u.uid
    ORDER BY points
    Gruß,

    Amica

    Edit: Okay, es sind vermutlich jeweils mehrere Datensätze und das Kreuzprodukt würde dein Endergebnis unbrauchbar machen. Nimm vielleicht doch lieber ein UNION und summiere nachher mit PHP.
    Zuletzt geändert von AmicaNoctis; 04.11.2011, 12:52.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      In dem Satz den du von mir zitiert hast, habe ich ein "nicht" zuviel drin gehabt^^

      Danke für deine Mühe.
      Bin in einem anderen Forum auf diese Lösung gestoßen und die funktioniert super

      Code:
      SELECT username, (
        SELECT SUM(r1.points) 
        FROM `reward1` r1 
        WHERE r1.userid=u.uid GROUP BY r1.userid
      ) AS rr1, (
        SELECT SUM(r2.points) 
        FROM `reward2` r2 
        WHERE r2.userid=u.uid GROUP BY r2.userid
      ) AS rr2, (
        (
          SELECT SUM(r1.points) 
          FROM `reward1` r1 
          WHERE r1.userid=u.uid GROUP BY r1.userid
        ) + (
          SELECT SUM(r2.points) 
          FROM `reward2` r2 
          WHERE r2.userid=u.uid GROUP BY r2.userid
        )
      ) as total 
      FROM `users` u WHERE 1
      ORDER BY total DESC

      Kommentar

      Lädt...
      X