MySQL Query

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rednas_N
  • Registratie: September 2010
  • Laatst online: 05:49
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:
code:
1
2
3
4
5
6
7
8
9
10
11
select wedstrijd.wedstrijdId,wedstrijd.uitTeam,

(select SUM(Doelpunten)FROM spelerinfo WHERE spelers.teamId = wedstrijd.uitTeam and spelerinfo.wedstrijdId = wedstrijd.wedstrijdId) AS DoelpuntenUit,wedstrijd.ThuisTeam,
(select SUM(Doelpunten)FROM spelerinfo WHERE spelers.teamId = wedstrijd.thuisTeam and spelerinfo.wedstrijdId = wedstrijd.wedstrijdId) AS DoelpuntenThuis

FROM spelerinfo
left join spelers on spelers.spelerNaam = spelerinfo.spelerId
left join wedstrijd on wedstrijd.wedstrijdId = spelerinfo.wedstrijdId


group by wedstrijd.wedstrijdId


Ik denk dat de fout zit in de query, maar ik weet niet waar de fout zit.

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.


Hier eventueel de database die ik hiervoor gebruik: (Download SQL bestand in een .zip)
code:
1
http://easy-upload.nl/f/Q3aIJCG7


De query die ik gebruik om doelpunten toe te voegen:
code:
1
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:
Afbeeldingslocatie: http://easy-upload.nl/f/jtU9CwSO

[ Voor 0% gewijzigd door Rednas_N op 26-09-2010 10:17 . Reden: Database opnieuw geupload ]

Just do it.


Acties:
  • 0 Henk 'm!

Verwijderd

Het bestand dat je op easyupload hebt gezet is niet in orde.
Ik haal met een query weer de totaalstand op en tot mijn grote verbazing heeft Team-A er een punt bij gekregen.
Doe je dit met bovenstaande query of met een andere query?

Kijk goed naar de insert query die je gebruikt om doelpunten toe te voegen voor team B.
Design tekening:
Je database klopt van geen kanten. Is dit voor een privé projectje?

edit:
Uitlegje over database (zonder teveel prijs te geven)
In jouw tabel spelerinfo heb je de kolom spelerId als primary key. Die spelerId is hier bij jou een spelernaam. Advies is om niet een spelernaam als primaire sleutel te gebruiken. Nu ga je joinen op "Zachary H. Thompson".
(maar goed, de database is al goedgekeurd).

In de tabel teams, ga je daar uiteindelijk ook weer de spelernaam in stoppen? Dan heb je dus 1 spelernaam in 3 tabellen staan. Wellicht is het leuk om daar iets op te verzinnen (is nog geen oplossing voor het probleem)

[ Voor 38% gewijzigd door Verwijderd op 26-09-2010 10:38 . Reden: uitleg over database ]


Acties:
  • 0 Henk 'm!

  • Rednas_N
  • Registratie: September 2010
  • Laatst online: 05:49
Het is een klein project voor school, maar aangezien ik hier vrijdag al mee bezig was en ik het toen ook al niet opgelost kreeg wou ik even in het weekend dit stukje fixen. Ik ben al een aardig eind met het project, krijg alleen deze query niet voor elkaar.

De database is wel goed gekeurd, dus in principe zou het niet aan de database mogen liggen.

De insert query klopt volgens mij ook gewoon. Want telkens als er een doelpunt gemaakt wordt geef ik de speler uit het desbetreffende team een punt. Met dit punt geef ik ook mee in welke wedstrijd (spelerinfo.wedsrijdId) het punt gemaakt wordt.

Ik heb de gebruikte database ook even opnieuw erop gezet.

[ Voor 4% gewijzigd door Rednas_N op 26-09-2010 10:17 ]

Just do it.


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Verwijderd schreef op zondag 26 september 2010 @ 10:09:
Je database klopt van geen kanten. Is dit voor een privé projectje?
Als je zulk soort opmerkingen maakt, leg dan ook even uit wat er volgens jou niet aan klopt. Dat is duidelijker voor de TS en voor andere mensen die het topic lezen.

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Je groepeert op wedstrijd.wedstrijdId, maar hebt nog twee andere niet-geagreggeerde velden in je select staan: wedstrijd.uitTeam en wedstrijd.thuisTeam. Andere databases dan MySQL zouden hier over vallen en de query ongeldig verklaren. Zo'n query geeft onvoorspelbaar gedrag (nouja, voorspelbaar als je de werking van de query optimizer van MySQL goed zou kennen). Mogelijk geeft groeperen op wedstrijd.wedstrijdId, wedstrijd.uitTeam, wedstrijd.thuisTeam de gewenste uitkomst; anders zou ik eerst even met twee losse queries proberen de goede uitkomsten te krijgen; dan kan je daarna wel weer proberen die uitkomsten te combineren.

[ Voor 14% gewijzigd door Confusion op 26-09-2010 10:32 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Rednas_N
  • Registratie: September 2010
  • Laatst online: 05:49
Bedankt voor jullie tips.

Ik heb het nu met deze query geprobeerd:
code:
1
2
3
4
5
6
7
8
9
10
select wedstrijd.wedstrijdId,wedstrijd.uitTeam,

(select SUM(Doelpunten)FROM spelerinfo WHERE spelers.teamId = wedstrijd.uitTeam and spelerinfo.wedstrijdId = wedstrijd.wedstrijdId group by wedstrijd.uitTeam) AS DoelpuntenUit

from spelerinfo

left join spelers on spelers.spelerNaam = spelerinfo.spelerId
left join wedstrijd on wedstrijd.wedstrijdId = spelerinfo.wedstrijdId

group by wedstrijd.wedstrijdId


Hier probeer ik dus eerst de scores voor het uit team op te tellen. Overigens werkt dit nog steeds niet. Ik doe hier iets fout maar ik weet niet precies wat.

Just do it.


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je hebt de link van RobLLL nog niet gelezen. Doe dat nu eerst eens.

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • Rednas_N
  • Registratie: September 2010
  • Laatst online: 05:49
Ik heb het even doorgelezen en ben nu al een heel eind verder. Telkens als ik een punt bij een speler erbij doe telt hij die netjes op bij de score. Als ik er 2 bij op tel dan telt hij er maar 1 bij, dit moet ik nog even fixen. Maar bedankt voor jullie hulp!

Just do it.


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Ga MySQL (of de connectie met MySQL) zo configureren dat foute queries met een fraaie foutmelding worden afgekeurd. Hier vind je uitleg over de diverse SQL_MODEs van MySQL en je dit (per connectie) kunt/moet instellen om er voor te zorgen dat MySQL zich gedraagt.

Lukraak GROUP BY in queries gooien, is een recept voor problemen, zie dit topic.
Pagina: 1