Anja: GROUP BY SUMME ...

Hallo, ich sitze schon länger daran mehrere Tabellen in eine zusammen zu fassen, jedoch habe ich noch schwierigkeiten mit doppelten spaltennamen und einer summenberechnung, hier die beiden teile die ich ausführen möchte

SELECT raid_value, member_id, member_class_id, member_name, member_rank_id,user_id as eqdkp_id, first_name, last_name, icq, skype, msn, irq, gender, birthday, username

FROM eqdkp_members ra, eqdkp_users r, eqdkp_raids

WHERE ra.member_name=r.username

durch 'eqdkp_raids' macht er mir aber nun mehrfach gleiche ergebnisse, weil ich in eqdkp_raids, sum(raid_value) machen muss, damit ich wieder eine spalte bekomme, wie kann ich das kombinieren?

  1. durch 'eqdkp_raids' macht er mir aber nun mehrfach gleiche ergebnisse

    Du hast diese Tabelle auch nirgends im WHERE eingeschränkt, dann wird da jede Zeile überall dazu multipliziert. Ich würde über einen JOIN nachdenken, das liest sich etwas verständlicher.

    weil ich in eqdkp_raids, sum(raid_value) machen muss, damit ich wieder eine spalte bekomme, wie kann ich das kombinieren?

    Von sum() ist in deinem Beispiel aber nichts zu sehen?! Und vom GROUP BY aus dem Beitragstitel auch nicht?
    Den Satz hab ich sowieso nicht verstanden, beschreib am besten nochmal was du wirklich machen willst.
    Für ein Beispiel wäre es besser wenn du nicht die wildesten Tabellen- und Spaltennamen bringst, dann denken da sicher mehr Leute drüber nach ;-)

    1. okay tut mir leid also ich probiere es nochmal:

      SELECT member_id, member_class_id, member_name, member_rank_id,user_id as eqdkp_id, first_name, last_name, icq, skype, msn, irq, gender, birthday, username

      FROM eqdkp_members ra, eqdkp_users r

      WHERE ra.member_name=r.username

      Das nutze ich um aus 2 Tabellen eine zu machen, jedoch sollen da noch 3 andere Tabellen hinzu wo aber dann vorher für jede zeile eine Summe gerechnet werden muss

      Beispiel:
      (ergebnis tabelle von oben)
      ID NAME WERT
      0  ich  2
      1  du   13

      ergebnis 2. tabelle
      NAME WERT
      ich 12
      ich 14
      ich 15
      ich 12

      die Spalte WERT als Summe dann an die erste Tabelle anfügen zu der richtigen Zuordnung (in dem Fall der Name)

      meine Frage ist jetzt, wie muss ich das verschachteln um die Summe-Tabellen in die erste Tabelle zu importieren... das es mit JOIN wohl gemacht wird konnte ich bissher erlesen, aber wieso das bei mir nicht funzt weiß ich nicht, das problem sind da wohl auch die doppelten spaltennamen (die ich aber ändern darf)

      1. das problem sind da wohl auch die doppelten spaltennamen

        Du kannst die gewünschte Tabelle für eine Spalte ansprechen mit Tabellenname.Spaltenname

        aber wieso das bei mir nicht funzt weiß ich nicht

        Naja wenn etwas noch gar nicht gemacht wird und es deswegen nicht passiert, würd ich es nicht "funzt nicht" nennen ;-)
        Wo hast du das eigentliche Problem?
        Ich würde die 3 zu summierenden Tabellen als Unterabfrage realisieren und dann ahnand einer ID zu den Spalten deiner bisherigen Abfrage joinen.

        1. ja ! richtig ! aber bitte schreibe mir wie ich das mache, denn genau das weiß ich nicht xD ich brauche nur mal nen Anfang wo genau das in meine Tabelle rein müsste um es "zu joinen"  :/

          1. wo genau das in meine Tabelle rein müsste

            Du meinst in die Abfrage?
            Ich meine das ngefähr so
            SELECT * FROM TabelleA a INNER JOIN Tabelle B b ON a.Spalte = B.Spalte
            INNER JOIN (SELECT SUM(...) FROM ... GROUP BY ...) c ON C.Spalte = A.Spalte

            Also erst mal die Summen in einer eigenen Abfrage bestimmen und diese Abfrage dann praktisch als Tabelle verwenden und sie zum Rest dazu hängen.

      2. moin,

        SELECT member_id, member_class_id, member_name, member_rank_id,user_id as eqdkp_id, first_name, last_name, icq, skype, msn, irq, gender, birthday, username

        FROM eqdkp_members ra, eqdkp_users r

        WHERE ra.member_name=r.username

        du benutzt die implizite join schreibweise, mein rat, nimm immer die explizite sprich:

        SELECT spalten...
        FROM eqdkp_members ra
        INNER JOIN eqdkp_users r ON ra.member_name=r.username
        ;

        der grund dafür ist einfach, man kann viel schneller sehen, wie die tabellen miteinander verbunden sind und auch, ob eine JOIN bedingung fehlt, sprich es ist viel besser zu lesen und verhindert somit möglilche fehlerquellen.

        Das nutze ich um aus 2 Tabellen eine zu machen, jedoch sollen da noch 3 andere Tabellen hinzu wo aber dann vorher für jede zeile eine Summe gerechnet werden muss

        es ist auch immer gut, dass man die gleiche fachliche sprache verwendet. man macht nicht wirklich aus 2 tabellen eine. das ergebnis bei SQL abfragen ist immer eine tabelle, egal wieviele tabellen du wie miteinander verknüpfst, es gibt immer nur ein resultset.

        die Spalte WERT als Summe dann an die erste Tabelle anfügen zu der richtigen Zuordnung (in dem Fall der Name)

        und da wird nichts angefügt an eine tabelle, die bleiben so wie sie sind. was du willst ist eine weitere spalte in der ausgabe der ergebnistabelle. und das machst du am besten mit einer korrelierten unterabfrage.

        meine Frage ist jetzt, wie muss ich das verschachteln um die Summe-Tabellen in die erste Tabelle zu importieren... das es mit JOIN wohl gemacht wird konnte ich bissher erlesen, aber wieso das bei mir nicht funzt weiß ich nicht, das problem sind da wohl auch die doppelten spaltennamen

        erstens wird dabei nichts importiert, zweitens sind joins nicht immer die richtige lösung. und wenn du schon alias namen für die jeweiligen tabellen benutzt, dann nutze sie auch bei jeder spalte, die du angibst, egal ob in der where klausel, bei der ausgabe, etc.

        SELECT ra.*, r.*,
               (SELECT SUM(r2.Wert)
                FROM eqdkp_raids r2
                WHERE r2.name = ra.member_name -- hier spaltennamen pruefen
               ) Meine_Summe
        FROM eqdkp_members ra
        INNER JOIN eqdkp_users r ON ra.member_name=r.username
        ;

        die spaltennamen in der korrelation musst du noch mal überprüfen, ich habe da geraten, weil du keine genauen angaben der drei tabellen geliefert hast mit beispieldaten.

        Ilja