SELECT ps.UserID, ps.SpilID , (SELECT point FROM PointRunder pr1 WHERE pr1.RundeID = 1 AND pr1.UserID = ps.UserID) as R1P , (SELECT point FROM PointRunder pr1 WHERE pr1.RundeID = 2 AND pr1.UserID = ps.UserID) as R2P , (SELECT point FROM PointRunder pr1 WHERE pr1.RundeID = 3 AND pr1.UserID = ps.UserID) as R3P , (SELECT sum(point) FROM PointRunder pr1 WHERE pr1.UserID = ps.UserID) as PointsGame FROM PointSpil ps
Personligt ville jeg nu lave en JOIN imellem de to tabeller, og så danne listningen i programmet.
SELECT ps.UserID, ps.SpilID , (SELECT point FROM PointRunder pr1 WHERE pr1.RundeID = 1 AND pr1.UserID = ps.UserID) as R1P , (SELECT point FROM PointRunder pr2 WHERE pr1.RundeID = 2 AND pr2.UserID = ps.UserID) as R2P , (SELECT point FROM PointRunder pr3 WHERE pr1.RundeID = 3 AND pr3.UserID = ps.UserID) as R3P , (SELECT sum(point) FROM PointRunder pr1 WHERE pr1.UserID = ps.UserID) as PointsGame FROM PointSpil ps
Synes godt om
Slettet bruger
06. marts 2007 - 15:41#3
Ok, nu begynder det faktisk at give mening.
Jeg har nu lavet den med de helt korrekte navne osv.
SELECT ps.UserID, ps.GameID, ps.Points , (SELECT Points FROM PointsRounds pr1 WHERE pr1.RoundID = 1 AND pr1.UserID = ps.UserID) as R1P , (SELECT Points FROM PointsRounds pr2 WHERE pr2.RoundID = 2 AND pr2.UserID = ps.UserID) as R2P , (SELECT Points FROM PointsRounds pr3 WHERE pr3.RoundID = 3 AND pr3.UserID = ps.UserID) as R3P FROM PointsGames ps
Det jeg måske skulle have fortalt er at
Synes godt om
Slettet bruger
06. marts 2007 - 15:45#4
OMG. der gik lige noget galt.
Det jeg måske skulle have fortalt er at RoundID er fleksible. Et Game består af flere rounds
Der er derfor en tabel kaldet rounds som indeholder et gameid og de roundid som nu hører til dette.
Tabellen Round
RoundID GameID 1 1 2 1 3 1 4 1 5 2 6 2 7 2
Kan dette let og elegant inkorporeres? SQL skal køres med et GameID = 1 fx, alt afhængig af hvilket game der skal vises
Så fik jeg lidt tid til at kigge nærmere på opgaven/problemet.
Der er i første omgang ingen sammenhæng imellem PointRunder og PointSpil tabellerne. Der mangler et SpilId i PointRunder tabellen (så man kan se hvilket spil pointene hører til - hvis altså den enkelte spiller skal kunne spille flere spil).
At have en tabel ved navn ROUND synes jeg ikke er en god løsning. For så er RoundID unikt i hele databasen - der kan altså kun være een eneste Round nr 1. (Men måske er det en god idé i det faktiske projekt, det ved jeg ikke).
Og selv om man sætter et SpilId ind i PointRunder, så har jeg svært ved at se hvad PointSpil's eksistentberettigelse er. Du kan få de samme data ved at GROUPe i PointRunder tabellen: SELECT UserId, SpilId, SUM(Point) FROM exp_766438_PointRunder GROUP BY userid;
Og henter du data ved at GROUPe, så slipper du også for at have samme data flere steder.
Så mit (nye) forslag er altså at du nøjes med den her tabel: CREATE TABLE exp_766438_PointRunder (UserId INT, SpilId INT, RundeId INT, Point INT);
Når du så vil vide resultatet af Spil nr 1 gør du sådan her: SELECT UserId, SpilId, SUM(Point) FROM exp_766438_PointRunder WHERE SpilId = [din indsatte værdi] GROUP BY UserId, SpilId;
Du kan selvfølgelig sagtens kalde tabellen noget andet. Det er bare hvad jeg har kaldt den/dem mens jeg har siddet og eksperimenteret.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.