Reken met MySQL.... pfff wat is dat lastig

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Thomas van den Heuvel

Thomas van den Heuvel

17/10/2018 17:59:25
Quote Anchor link
@Rob gaf je al een goede voorzet: sla de informatie op zoals deze ook in de realiteit voorkomt: games, sets en matches.

Theoretisch gezien hoef je enkel de informatie van de games op te slaan, omdat de rest te berekenen is, maar dat maakt e.e.a. wel complexer.

In zekere zin is de informatie van de sets al redundant, deze is immers afleidbaar.

Op eenzelfde manier zou je ook de informatie wie een match gewonnen heeft apart kunnen opslaan, je hoeft deze dan maar één keer te bepalen/berekenen in plaats van elke keer opnieuw als je dit gegeven nodig hebt.

Vervolgens kun je hiermee makkelijker verder rekenen, omdat je eerder al alle relevante tussen- en eindresultaten waarin je geinteresseerd bent hebt berekend en opgeslagen.

Ik denk dus dat als je meer "afleidbare" informatie redundant/tussentijds opslaat, de rest ook makkelijker wordt.

Zoals altijd: verdeel en heers.

Je zou dus bijvoorbeeld een kolom "winnaar" kunnen toevoegen aan de tabel "matches". Vraag jezelf gewoon af wat moeite kost om (achteraf) te berekenen, en sla dit gewoon apart op in een of andere kolom.
Gewijzigd op 17/10/2018 18:04:27 door Thomas van den Heuvel
 
PHP hulp

PHP hulp

14/11/2018 02:38:16
 
- Ariën -
Beheerder

- Ariën -

17/10/2018 18:41:08
Quote Anchor link
...maar het is echter voor hem niet heel simpel, maak ik op.
Gewijzigd op 17/10/2018 18:41:35 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

17/10/2018 19:16:18
Quote Anchor link
Dat snap ik, maar reden te meer om stapsgewijs naar een oplossing te werken, in plaats van in 1x naar het eindresultaat te willen, zonder te weten hoe.
Gewijzigd op 17/10/2018 19:16:36 door Thomas van den Heuvel
 
Rob Doemaarwat

Rob Doemaarwat

17/10/2018 19:29:22
Quote Anchor link
@Dirk: Zie je kans om je code (wat je tot nu toe hebt) op GitHub of zoiets te gooien, of een ZIP die we ergens kunnen downloaden (Google docs, WeTransfer, enz) (privé bericht mag ook). Dan kan ik er eens naar kijken. Ik heb het idee dat je het meeste werk al gedaan hebt (invoeren van de setstanden, enz), en ook in je datamodel al ruimte hebt om de (berekende) uitslagen op te slaan. We kunnen d'r nog wel een uur over lullen, maar misschien is het met 5 minuten op te lossen.

Een complete dump van je datamodel zou ook handig zijn.
 
Dirk Huizinga

Dirk Huizinga

04/11/2018 09:22:38
Quote Anchor link
Topic mag voor wat nu wel gesloten worden... het is uiteindelijk een pracht resultaat geworden. Alle lof naar Rob. hij dingen toegelicht, uitgelegd en geholpen als ik iets snapte (was/is best veel). Maar er zat wel een hele leercurve voor me.. en dat alleen al was de moeite waard. Ron thnx, man
 
Rob Doemaarwat

Rob Doemaarwat

04/11/2018 11:06:04
Quote Anchor link
Ter info voor de geïnteresseerden:

De query is wel zo'n beetje geworden wat ik op 14/10/2018 22:25:58 al aangaf, alleen nog met een extra kolom "aantal gespeelde wedstrijden" en een join naar de "poules" tabel voor de poule letter.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT t.teamNaam,p.pouleLetter,(
    SELECT count(*) FROM `schema`
    WHERE schemaPouleId = t.teamPouleId
      AND (schemaTeamA = t.teamNaam OR schemaTeamB = t.teamNaam)
      AND (schemaUitslagA > 0 OR schemaUitslagB > 0) //anders is de wedstrijd nog niet gespeeld
  ) AS aantal,
  ifnull((SELECT SUM(ifnull(schemaUitslagA,0)) FROM `schema` WHERE schemaPouleId = t.teamPouleId AND schemaTeamA = t.teamNaam),0) +
  ifnull((SELECT SUM(ifnull(schemaUitslagB,0)) FROM `schema` WHERE schemaPouleId = t.teamPouleId AND schemaTeamB = t.teamNaam),0) AS score
FROM teams t
JOIN poules p ON p.pouleId = t.teamPouleId
" . $where . "
ORDER BY pouleLetter ASC, score DESC

De team <-> schema koppeling is nu nog (steeds) op teamNaam, maar dat moet "ooit" (v 2.0) het teamId worden. Uiteraard kan dit allemaal nog veel mooier worden ingedeeld (over meerdere sub-tabellen), waardoor je ook flexibeler bent qua aantal wedstrijden (bijvoorbeeld ook enkelspel), of aantal sets - maar voor nu werkt dit.

De totaal-uitslag wordt gewoon in PHP berekend als de set-uitslagen worden ingevoerd/opgeslagen, en dan direct in de bestaande "multi-kolom" schema tabel opgeslagen (vandaar ook dat opslaan in de $_POST, zodat de rest van de code gewoon bleef werken zoals deze al deed toen de uitslag nog met de hand in aparte invoervelden moest worden ingevoerd):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$uitslagA = $uitslagB = 0;
foreach(['Hd','Dd','Mix1','Mix2'] as $game){
  $setsA = $setsB = 0;
  for($set = 1; $set <= 3; $set++){
    if($_POST["schema-{$game}{$set}A"] > $_POST["schema-{$game}{$set}B"]) $setsA++;
    elseif($_POST["schema-{$game}{$set}A"] < $_POST["schema-{$game}{$set}B"]) $setsB++;
  }
  $_POST["schema-Sets{$game}A"] = $setsA;
  $_POST["schema-Sets{$game}B"] = $setsB;
  if($setsA > $setsB) $uitslagA++;
  else $uitslagB++;
  //altijd ongelijk (bij 1-1 volgt een tie-break)
}
$_POST['schema-UitslagA'] = $uitslagA;
$_POST['schema-UitslagB'] = $uitslagB;
 
- Ariën -
Beheerder

- Ariën -

04/11/2018 17:57:29
Quote Anchor link
Dirk Huizinga op 04/11/2018 09:22:38:
Topic mag voor wat nu wel gesloten worden...

Dankjewel. Het topic zal vanzelf wel omlaag zinken. :-)
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.