Sorteer probleem
Met mijn beperkte mogelijkheden qua php loop ik tegen ghet volgende probleem aan.
In mijn database staan nu 6 records van 3 verschillende spelers twee verschillende speeldata:
03-09-2014 en 10-09-2014 met mijn onderstaande query krijg ik de resultaten van 03-09-2014 waar ik om begrijpelijke redenen de laatste data zou willen zien.
Ik heb het geprobeerd met een WHERE clausule maar dan werkt de SUM niet meer.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
include("connect.php");
$query = "SELECT spelerid, speler, punten, marsen"
."SUM(punten) AS totpunten, SUM(marsen) AS totmarsen "
."FROM klaverjassen GROUP BY spelerid ORDER BY totpunten DESC ";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
?>
include("connect.php");
$query = "SELECT spelerid, speler, punten, marsen"
."SUM(punten) AS totpunten, SUM(marsen) AS totmarsen "
."FROM klaverjassen GROUP BY spelerid ORDER BY totpunten DESC ";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
?>
En even verder op:
Iemand een oplossing???
Alvast bedankt.
Gewijzigd op 19/08/2014 09:06:40 door Luc Gomes
Ik zie nergens een ORDER BY datum o.i.d.
Het lijkt me handig om dan op datum te sorteren.
Daarnaast klopt je GROUP BY niet: ALLE kolommen die niet een aggregtie functie zijn, moeten daar staan.
http://wiki.pfz.nl/group-by
dus:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT spelerid, speler, punten, marsen,
SUM(punten) AS totpunten,
SUM(marsen) AS totmarsen
FROM klaverjasssen
WHERE .....
GROUP BY spelerid, speler, punten, marsen
ORDER BY .....
SUM(punten) AS totpunten,
SUM(marsen) AS totmarsen
FROM klaverjasssen
WHERE .....
GROUP BY spelerid, speler, punten, marsen
ORDER BY .....
Je haalt hierbij geen datum op, dus misschien is dat ook handig om erbij te tonen.
Met de WHERE clausule telt SUM alleen de waarde binnen de WHERE op, en ik wil dat hij alle "punten" optelt.
Ik ga hiermee aan de slag je hoort het van me.
Alvast bedankt.
Toevoeging op 19/08/2014 10:01:32:
Zoals ik al vertelde werkt dat ook niet ik krijg hiermee deze uit komst:
Punten vw marsen v.w. totpunten totmarsen
45 1 45 1
32 1 32 1
21 1 21 1
De totpunten zouden respectievelijk 55, 52 en 51 moeten zijn als het resutaalt van SUM(punten).
Verder krijg ik nu wel de laatste records van 10-09-2014.
Toevoeging op 19/08/2014 10:15:48:
wellicht handig om het verschil te zien
Met WHERE:
http://www.bckamperduin.nl/Klaverjassen/klaverjas.php
zonder WHERE
http://www.bckamperduin.nl/Klaverjassen/klaverjas2.php
Gewijzigd op 19/08/2014 10:07:10 door Luc Gomes
Maakt helaas gen enkel verschil
en dan liefst onder elkaar en niet op 2 andere pagina's onderbrengen.
Het idee is een "simpele" webbassed applicatie voor onze klaverjasclub, tot op heden kreeg ik per email de uitslagen en die zette ik dan op onze website.
Dat ging natuurlijk geregeld de mist in dus vandaar.
De klaverjasclub speelt wekelijks van september tot april ofzo.
wat ik nu heb is een invulformulier waarin wekelijks per speler de behaalde punten en marsen worden ingevoerd.
Die moeten dan compleet opgeteld, worden weer gegeven in klaverjas.php, dus de totaal behaalde punten en marsen dat optellen doe ik met SUM alle behaalde "punten" van betreffende speler.
Mijn database bevat de volgende tabellen:
Spelers - met de namen van de spelers en een ID
speeldata - met alle speeldagen en een ID
Deze worden gebruikt voor dropdown in het invulformulier
Klaverjassen - de eigelijke opslag met de volgende velden
Kl_ID
Speeldata
Spelerid
Speler
Punten
Marsen
Totpunten
Totmarsen
Nu ben ik lang bezig geweest om in de afhandeling van het formulier de punten op te tellen bij tot punten maar dat kreeg ik niet voor elkaar.
De punten werden opgeteld bij het vorige record van de speler:
dus:
week 1 ID 1 behaalde speler a 20 punten en 1 mars dat ging prima bij totpunten 20 en bij totmarsen 1
week 2 ID 2 behaalde speler a 40 punten en 2 marsen en dat werd opgeteld bij het record met ID 1
Wat ik wil is de meest recent gespeelde partijen, met de laatst behaalde (ingevoerde) punten en marsen.
En bij totpunten de totaal behaalde punten en bij tomarsen de totaal behaalde marsen.
ik hoop dat het zo een beetje duidelijk is.
Toevoeging op 19/08/2014 11:33:30:
Sorry voor het extra bericht, maar ik ben natuurlijk ondertussen lekker aan het rommelen in klaverjas.php
dus nog een keer zonder WHERE:
http://www.bckamperduin.nl/Klaverjassen/klaverjas2.php
Met WHERE:
http://www.bckamperduin.nl/Klaverjassen/klaverjas3.php
Gewijzigd op 19/08/2014 11:36:06 door Luc Gomes
geef onderelkaar een tabelletje met de waarden in de database
en een tabelletje waar je aangeeft wat je dan wilt verkrijgen.
Dat werkt in elk geval voor mij 100x duidelijker dan een heel verhaal.
En voor de (database)programmeur moet het niet nodig zijn om te begrijpen wat een applicatie doet, maar wel "wat staat erin" en "hoe moet het resultaat eruit zien".
in de tabel klaverjassen zit deze data:
ID: 1, 2, 3, 4, 5, 6
speeeldata: 2014-09-03, 2014-09-10
spelerid: 1, 2, 3, 3, 2, 1
speler: speler a, speler b, speler c, speler c, speler b, speler a
punten: 10, 20, 30, 21, 32, 45
marsen: 1, 2, 3, 1, 1, 1
totpunten: 10, 20, 30, 21, 32, 45
totmarsen: 1, 2, 3, 1, 1, 1
wat ik eruit wil hebben;
ID: 4, 5, 6 - de laatst gespeelde partijen op speeldata
speeeldata: 2014-09-10 (als het mogelijk is als 10 september 2014)
spelerid: 1, 2, 3
speler: speler a, speler b, speler c -gesorteerd op totpunten hoog, laag
punten: 21, 32, 45 - behaald op speeldata
marsen: 1, 1, 1 - behaald op speeldata
totpunten: 55, 52, 51 - totaal behaald door spelers
totmarsen: 2, 3, 4 - totaal behaald door spelers
hopelijk is dit wat je bedoeld?
Gewijzigd op 19/08/2014 12:24:59 door Luc Gomes
Waarom zijn er maar 2 waarden in de kolom speeeldata?
Is het niet handiger om de info van de spelers apart op te slaan:
spelers
speler_id int
spelernaam varchar
wedstrijden
wedstrijd_id int
datum date
scores
speler_id int FK int
wedstrijd_id FK int
punten int
marsen int
En ik heb het vermoeden dan totpunten en totmarsen iets te maken heeft met een optelling van marsen en punten.
De data van de speeldata staat apart:
spelers:
spelerid
speler
speeldata:
dataid
speeldata
Scores:
Ga ik aanmaken, maar ik zal wel dom zijn de INT begrijp ik maar wat is FK?
En hoe gaat ik dat opvragen want tot nu toe bevraag ik maar een tabel en nu moet ik er 3 gaan aanroepen.
Of begrijp ik het gewoon niet?
"verwijst naar een kolom in een andere tabel".
dus als in Speler staat dat speler_id = 1 hoort bij Piet,
dan weet je vauit Scores dan als daar staat dat speler_id = 1, dan weet je daaruit dat het om Piet gaat.
Liefst stel je het dan ook nog zo in, dat je speler_id niet kunt verwijderen als er nog scores zijn van hem, of dat je scores kunt noteren voor speler_id = 100 als je dat id niet hebt.
Kom echt net kijken in het PHP/MySQL gebeuren, jij lacht er waarschijnlijk om maar ik vond dat ik al een aardig eind op weg was.
Best moeilijk om het onder de knie te krijgen, heb je niet een stuk voorbeeld (script?) voor mij dat ik kan zien hoe een en ander werkt?
Het zou mij echt een heel eind op weg helpen.
klaverjas.php
Spelers:
alle spelers die op de meest recente speeldag een score hebben.
Wedstijden:
De meest recente speeldag, liefst volgens format 10 september 2014.
scores:
op de meest recente speeldag behaalde punten en marsen.
gesorteerd van hoog nar laag op punten.
eventueel andere php-file?
ranking.php
spelers:
Alle spelers die een score hebben behaald in de lopende competitie
Wedsrijden:
niet van toepassing.
Scores:
Van alle spelers die een score hebben de totalen van zowel de punten als de marsen.
gesorteerd van hoog nar laag op punten.
Gewijzigd op 19/08/2014 15:07:00 door Luc Gomes
Ik ga ermee stoeien.
Als ik me niet vergis kun je dan onderaan dit doen:
Probleem opgelost iedereen enorm bedankt voor de hulp.