8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)
  • Q:
    Bijdrager
    Sanderman1992

    MySQL Query – Help?

    Beste gebruikers,

    Ik ben al een tijdje bezig met een mySQL query die ik maar niet voor elkaar krijg. De query werkt wel, maar niet zoals ik het wil. Ik heb al diverse oplossingen geprobeerd maar zonder juist resultaat.

    Het is de bedoeling dat ik met deze query de stand kan op vragen tussen 2 teams die een wedstrijd tegen elkaar gespeeld hebben.

    Momenteel is dit de query:

    <br />
    select wedstrijd.wedstrijdId,wedstrijd.uitTeam,</p>
    <p>(select SUM(Doelpunten)FROM spelerinfo WHERE spelers.teamId = wedstrijd.uitTeam and spelerinfo.wedstrijdId = wedstrijd.wedstrijdId) AS DoelpuntenUit,wedstrijd.ThuisTeam,<br />
    (select SUM(Doelpunten)FROM spelerinfo WHERE spelers.teamId = wedstrijd.thuisTeam and spelerinfo.wedstrijdId = wedstrijd.wedstrijdId) AS DoelpuntenThuis</p>
    <p>FROM spelerinfo<br />
    left join spelers on spelers.spelerNaam = spelerinfo.spelerId<br />
    left join wedstrijd on wedstrijd.wedstrijdId = spelerinfo.wedstrijdId</p>
    <p>group by wedstrijd.wedstrijdId</p>
    <p>

    Volgens mij zit het probleem hem in de database maar ik weet niet wat er fout is. Stel ik geef Team-A 5 punten, en vervolgens het uit team 5 punten telt hij die bij Team-A op. Stel ik geef eerst het uit team 5 punten en dan het thuis team telt hij alles bij het uit team op.

    Hier eventueel de database die ik hiervoor gebruik:

    http://easy-upload.nl/f/4zfMp0rC

    De query die ik gebruik om doelpunten toe te voegen:

    insert into spelerinfo (spelerId, wedstrijdId, geel, rood, Doelpunten ) VALUES ('Zachary H. Shannon','22','0','0','15')

    Het probleem is dus:
    Het team waar het eerste punt aan gegeven wordt, daar worden alle punten bij opgeteld.

    Voorbeeldsituatie:
    Team-A speelt tegen Team-B, ik geef een speler uit Team-A het eerste punt en ik haal met een query de totaalstand op. Vervolgens komt hieruit dat Team-A één punt gescoord heeft wat dus klopt. Vervolgens geef ik een speler uit Team-B een punt. Ik haal met een query weer de totaalstand op en tot mijn grote verbazing heeft Team-A er een punt bij gekregen.

    Als ik dit hele verhaal dus andersom doe, dat ik dus eerst een speler uit Team-B een punt geef dan worden alle punten opgeteld bij Team-B.

    Design tekening:

    Bijdrager
    Terwanerik

    Waarom zou je het niet optellen met php of wat voor taal je dan ook gebruikt? Moeilijk doen met SUM e.d. is dan niet nodig.

    Bijdrager
    Sanderman1992

    Ik begrijp wat je bedoelt, het programma om deze database is in C# geschreven. Maar met een query leek mij ook wel een mooie oplossing. En als ik het anders zou willen doen zou ik ook wel graag willen weten hoe ik dit werkend krijg.

    Bijdrager
    Terwanerik

    Ah, je kan toch gewoon als er een doelpunt word gemaakt dat hij dan een nieuwe insert doet dat je bijvoorbeeld hebt:

    id : 1
    match_id : 2
    time : 12:01
    speler_id : 12

    en dan bijvoorbeeld een andere:

    id : 2
    match_id : 2
    time : 12:56
    speler_id : 14

    dan hoef je die alleen maar op te tellen;)

    Bijdrager
    Sanderman1992

    Hij telt het ook op. Een speler maakt een punt, die speler zit in een team en die speler zit in een wedstrijd. De wedstrijd heeft een ID. Aan de hand van het team waar de speler in zit en het wedstrijd ID wil ik de totaalscore berekenen wat het team gescoord heeft. Alleen het probleem is dat het niet 100% werkt. Zie mijn uitleg voor meer informatie.

    Bijdrager
    TGV

    Misschien omdat je de relaties verkeerd gebruikt. In het schema staat dat je van spelers naar team en van team naar wedstrijd moet, maar de query gaat rechtstreeks van spelers naar wedstrijd. Dat kan alleen als teamId en teamNaam identiek zijn. En verder geeft de query NULL terug als er niet gescoord is. Je zou NVL() om de berekening kunnen plaatsen om dat te voorkomen.

    Bijdrager
    Sanderman1992

    TGV, bedankt voor je reactie. Ik ben nu weer een tijdje bezig met deze query maar ik kom er eigenlijk nog steeds niet uit. Kan iemand mij de juiste query geven die het juiste resultaat laat zien?

    Bijdrager
    Verwijder

    het volgende werkt al beter, maar ik heb geen MySQL en ben niet zo thuis in SQL dus het kan vast beter en mooier:

    <br />
    select wedstrijd.wedstrijdId,wedstrijd.uitTeam,<br />
    (select SUM(Doelpunten) FROM spelerinfo left join spelers on spelers.spelerNaam = spelerinfo.spelerId WHERE spelers.teamId = wedstrijd.uitTeam and spelerinfo.wedstrijdId = wedstrijd.wedstrijdId) AS DoelpuntenUit,wedstrijd.ThuisTeam,<br />
    (select SUM(Doelpunten) FROM spelerinfo left join spelers on spelers.spelerNaam = spelerinfo.spelerId WHERE spelers.teamId = wedstrijd.thuisTeam and spelerinfo.wedstrijdId = wedstrijd.wedstrijdId) AS DoelpuntenThuis<br />
    FROM wedstrijd<br />
     
8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.