Wie Abfrage konstruieren?

Hi an Alle.

Habe eine Frage: Wie formuliere ich für Mysql die folgende Abfrage am besten?

Tabelle Spieler

  • ID
  • Punkte

Tabelle Häuser

  • Besitzer (Steht die SpielerID drinn)
  • Punkte für das Haus

Tabelle Armee

  • Besitzer(Steht auch die SpielerID drinn)
  • Punkte (für die Einheit)

Nun brauche ich als Gesamtpunkte Alle Häuser wo Besitzer.ID=Spieler.ID und alle Armeeeinheiten wo Besitzer.ID=Spieler.ID. Und das ganze brauche ich jetzt summiert für eine Highscore.

Beispiel:
Spieler1 - 1000 Häuserpunkte gesamt - 3000 Armeepunkte gesamt

Ich denke mal, wenn das überhaupt klappt brauche ich SUM() und GROUP BY(). Aber ich habe es leider noch nicht geschafft, das ganze vernünftig darzustellen als Code. Jedesmal gibt er mir mehr Punkte aus, als eigentlich vorhanden.

Hoffe jemand kann mir helfen. Evtl. hat jemand auch eine andere Idee. (Ich arbeite mit PHP, falls jemand eine andere Lösung hat)

Vielen Dank auf jeden Fall schon mal#

MfG
D. Mertins

Hi Daniel,
das du mit PHP arbeitest bringt leider nicht viel… Die Datenbank wäre wichtiger gewesen, wie das ganze in mySQL funktioniert weiss ich auf die schnelle niocht, in Oracle könnte es über UNION gehen

hab hier mal ein schnelles Beispiel:
–Tabbellen:
CREATE TABLE player(
pl_ID INTEGER,
points INTEGER
);
CREATE TABLE houses(
pl_ID INTEGER,
points INTEGER
);
CREATE TABLE armees(
pl_ID INTEGER,
points INTEGER
);
–Inhalte:

INSERT INTO blo_player(pl_id,points)VALUES(1,5);
INSERT INTO blo_player(pl_id,points)VALUES(2,10);
INSERT INTO blo_houses(pl_id,points)VALUES(1,20);
INSERT INTO blo_houses(pl_id,points)VALUES(1,30);
INSERT INTO blo_houses(pl_id,points)VALUES(1,40);
INSERT INTO blo_houses(pl_id,points)VALUES(2,1);
INSERT INTO blo_armees(pl_id,points)VALUES(1,10);
INSERT INTO blo_armees(pl_id,points)VALUES(1,10);
INSERT INTO blo_armees(pl_id,points)VALUES(1,10);
INSERT INTO blo_armees(pl_id,points)VALUES(2,2);

Gruppierung jeder einzelnen Tabelle und Spielerpunkteanzahl, einzelne Ergebnisse über Union verbinden und auf die Gesamtmenge Gruppieren inklusive sum(Punkte)

SELECT pl_id,SUM(points) FROM(SELECT pl_id,SUM(points) points
FROM player
GROUP BY pl_id
UNION
SELECT pl_id,SUM(points)
FROM houses
GROUP BY pl_id
UNION
SELECT pl_id,SUM(points)
FROM armees
GROUP BY pl_id)
GROUP BY pl_id

kleiner Tipp(gilt auch für mysql): wenn du deine Tabellen in einer Abfrage über die ID verknüpfst, alle Punkte summierst und diese miteinander addierst, wirst du viel mehr Punkte erhalten als du willst. Der Grund ist einfach der, dass bei deiner Tabellenstruktur, mehr Zeilen entstehen als du willst. Probier einfach mal in meinem Beispiel einen Select * über alle Tabellen verknüpft, da erhälst du für Spieler 1 neun Zeilen in denen jeweils 5(für Spielerpunkte), 10(für armeepunkte) und 20,30 oder 40 für Häuserpunkte steht. das addiert macht insgesamt 405 Punkte und nicht 125 wie gewollt.