stand competitie uitrekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back end developer PHP, Laravel

Functie Jij komt te werken in ons webdevelopment team, wat bestaat uit 8 ervaren collega’s. Hiernaast hebben wij nog een team van 2 ontwikkelaars die aan native applicaties werken. Bij ons zijn er korte lijntjes en er hangt een gezellige informele werksfeer. Maar het belangrijkste is natuurlijk dat je aan geweldige applicaties zult gaan werken! Wij willen als organisatie niet te groot worden, we willen gewoon toffe dingen maken. Onze techstack bestaat momenteel uit: PHP, Laravel, Javascript, Typescript, Git, MySQL, Java, Kotlin, Xamarin. Samen met ons ga jij zorgen dat we puik werk leveren! Waarbij je bij elke fase in

Bekijk vacature »

Low Code Developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en ben jij HBO afgestudeerd in de richting van IT? Heb jij verstand van datamodellering, NO CODE Platformen en kun jij het aan om projecten te leiden? Voor een leuke opdrachtgever in omgeving Capelle aan den IJssel zijn wij op zoek naar een No Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten in heel het land! Wat ga je hier zoal doen? Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform, je

Bekijk vacature »

.NET Software Developer

Dit ga je doen Als .NET Software Developer zul jij je voornamelijk bezig houden met: Het van scratch af aan bouwen van applicaties (.NET, C#, Bootstrap, KnockoutJs en WebAPI2); Het testen van jouw code d.m.v. het uitvoeren van unittesten; Het oplossen van bugs in de code; Het onderhouden van contact met collega's betreffende de door jouw ontwikkelde applicaties; Het verbeteren en doorontwikkelen van maatwerkapplicaties. Hier ga je werken Jij gaat aan de slag als .NET Software Developer en gaat je focussen op het bedenken, ontwikkelen en testen van maatwerkapplicaties in voornamelijk C#. Dit ga je doen bij een grote, internationale

Bekijk vacature »

C# .NET Developer IoT SQL Server

Samengevat: Wij ontwikkelen innovatieve oplossingen om apparaten en bezittingen op een eenvoudige en flexibele manier te beveiligen. Ben jij een C# .NET developer? Heb jij ervaring met C# en SQL server? Vaste baan: C# .NET Developer IoT HBO €3.200 - €4.500 Deze werkgever is gespecialiseerd in hoogwaardige GSM/GPRS alarm- en telemetrietechnologie. Met een eigen productlijn en klantspecifieke ontwikkelingen biedt deze werkgever oplossingen om op afstand te meten, melden, loggen en aansturen, ook op plaatsen zonder stroomvoorziening. Onze producten worden gekarakteriseerd door flexibiliteit in de configuratie, betrouwbaarheid en een extreem laag stroomverbruik. Zij werken voor MKB klanten. Deze werkgever heeft veel

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Voor een mooi softwarebedrijf in omgeving Gouda zijn wij op zoek naar een Embedded Software developer. Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij enthousiast en een echte team player? Lees dan snel verder en laat wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot aantal creatieve en ambitieuze ontwikkelaars. Ze

Bekijk vacature »

Medior/senior Front-end developer (Vue.js)

Functie Als Front-end developer ben je uiteindelijk overkoepelend aan de slag voor de 3 ontwikkelteams die ieder aan een specifiek product werken. In samenwerking met de UX-designer en de huidige Front-end developer zorg je voor gebruiksvriendelijke software. Lijkt het jou interessant om complexe problemen op te lossen en feautures naar een hoger niveau te tillen? En vind je het niet erg om oudere delen van de applicaties te refactoren i.c.m. het toevoegen van nieuwe functionaliteiten? Dan komen wij graag met je in contact. Eisen • HBO werk- en denkniveau (ze kijken niet naar papieren, maar naar denkniveau, motivatie en zelfredzaamheid)

Bekijk vacature »

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

Bekijk vacature »

Software developer (PHP) - Utrecht centrum

Functie Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten. Het team bestaat uit 4 developers, een klein team dus met korte lijnen. Alles in intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. In het team streven ze naast de hoogst haalbare kwaliteit. Hiervoor werken ze nauw met elkaar samen en levert

Bekijk vacature »

Senior Fullstack Developer (GOLang, TypeScript)

Bedrijfsomschrijving Our client is one of the large worldwide accounting firms. Functieomschrijving We are looking for a senior (all-round) developer (Project On Demand / Tax Technology) Uses as much as possible technology in support of the development process: Git, Jenkins, Docker, npm, skaffold, helm, etc. We are looking for a real hands-on developer; ie not a team lead or other managerial-style role; Acts with integrity both internally and externally and takes personal responsibility in this respect; Curious about the developments within their field and driven to make a difference with the team; Able to empathize with colleagues and stakeholders and

Bekijk vacature »

Mendix Developer

Functie Wat ga je doen als Mendix Developer? We leven in een wereld die snel ontwikkelt en veranderd, ook nemen bedrijfsbelangen toe en blijken risico’s moeilijker in te schatten, daarom wij op zoek naar Junior, Medior en Senior Developers die bedrijven kunnen helpen met hun screeningproces en zorgen dat deze efficiënt en 100 procent AVG compliant is. Het concept achter Mendix is duidelijk. De klant heeft een vraag/probleem. Dit kunnen we door middel van slimme software oplossen. In plaats van te werken met de nieuwste technieken en tools, wordt er gekozen voor het implementeren en maken van software dat op

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Wil jij bij een platte en informele organisatie werken? Lees dan snel verder! Voor een opdrachtgever in omgeving Rotterdam dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen PHP, JAVA en Node.js. Je gaat klanten ondersteunen op het gebied van geleverde software en webapplicaties. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn

Bekijk vacature »

Software programmeur

Functieomschrijving Voor een uitdagende werkgever in regio Breda zijn wij op zoek naar een Full Stack C#.NET programmeur. Je bent verantwoordelijk voor het ontwikkelen van apps, webapplicaties en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere developers en engineers om de sensoren in machines te scannen en vervolgens de data om te zetten in management informatie voor de klanten. Taken en verantwoordelijkheden: Je gaat aan de slag met de volgende technologieën en frameworks: C#, JS frameworks, HTML, TypeScript, SQL & C++, CSS. Geen ervaring met één van deze technologieën is dan ook geen enkel probleem! Deze werkgever biedt

Bekijk vacature »

Junior Software Developer (HBO / WO)

Functie omschrijving Voor een leuke opdrachtgever zijn wij op zoek naar een Junior Software Developer! Sta jij aan het begin van je carrière en heb je net je HBO of WO-diploma in de richting van ICT of Techniek mogen ontvangen? En heb jij grote affiniteit met software development? Dan hebben wij bij Jelling IT Professionals de perfecte opdrachtgever in de omgeving van Hoofddorp. Binnen deze functie vervul je een onsite learning programma waarbij je aan de slag gaat met PHP en Laravel. Hierbij ben je voornamelijk werkzaam op verschillende klantlocaties en is het jouw taak om hun wensen en eisen

Bekijk vacature »

Senior Front-End Developer

Als Senior Front-End Developer bij Coolblue verbeter je de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Wat doe je als Senior Front-End Developer bij Coolblue? Als Senior Front-end Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Senior Front-end Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Nadenken

Bekijk vacature »

Senior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Pagina: 1 2 3 volgende »

Jo Immanuel

Jo Immanuel

06/08/2013 13:21:29
Quote Anchor link
Beste forumleden,

Ik ben bezig met het maken van een competitie. Ik heb hier een tijdje geleden al een paar vragen over gesteld.

Ik ben begonnen met het maken van een (relationele) database. Ik heb onder andere de volgende tabellen:
- tabel clubs (PK: clubID)
- tabel spelers (PK: spelerID)
- koppeltabel speler/clubs (FK's: clubID en spelerID)
- tabel wedstrijden (PK: wedstrijdID, FK's: clubID (2x), datum en tijd, speelronde)
- tabel doelpunten (PK: doelpuntID, FK's: wedstrijdID, clubID en spelerID)

Nou is het volgens de algemene moderne regels van database-inrichting dus de bedoeling dat je geen dubbele gegevens in je database opslaat. Daarom dus ook dat je in de tabel wedstrijden geen doelpunten en uitslagen (en resulterende punten voor de stand in de competitie) bijhoudt. De uitslag van een bepaalde (of alle) wedstrijd(en) haal je uit de tabel doelpunten.

Klinkt allemaal goed en logisch natuurlijk, maar voor een beginnende sql/php-er zoals mij, heb ik wel een beetje het gevoel dat ik het mezelf zo wel heel moeilijk aan het maken ben. (Vind ik overigens ook niet erg, want dan leer je er wel veel van...) Vooral wanneer het aankomt op de berekening van de stand in een competitie.

Ik wil zoiets krijgen:

(positie)(naam club)(#wedstrijden)(#punten)(doelpuntensaldo)
1. Ajax 4 12 +9
2. PSV 4 11 +7
3. Feyenoord 4 11 +5
etc.

In principe (/in grote lijnen) lijkt het mij dat je een stand van de competitie als volgt middels sql query ophaalt:

Select clubnaam,
from tabel clubs,
Order by #punten, doelpuntensaldo

Maar dan ben ik er nog niet, want er moet ook gebruik worden gemaakt van de tabellen wedstrijden en doelpunten. De informatie uit die tabellen bepalen namelijk het totaal aantal punten en doelpunten waarop gerangschikt moet worden.

De Sql-query zou dan in grote lijnen zoiets moeten zijn als:

Select clubnaam, #wedstrijden, #punten, doelpuntensaldo
form tabel clubs,
(en dan met joins de tabellen wedstrijden en doelpunten koppelen)
Order by #punten, doelpuntensaldo

Maar volgens mij kun je #wedstrijden, #punten en doelpuntensaldo helemaal niet in een select statement gebruiken. Ze komen immers niet als kolommen in een tabel in mijn database voor. Die moeten dus uitgerekend (met PHP?) worden.

En dan wordt het voor mij toch vrij ingewikkeld allemaal om te scipten.

Het lijkt me dat dan de volgende dingen in het scipt gedaan moeten worden:

1. In tabel doelpunten moet er bij elke wedstrijd gekeken worden hoeveel doelpunten de thuisclub gemaakt heeft en hoeveel doelpunten de uitclub.
2. Dan moet ik een statement maken dat
Als # doelpunten thuisclub > # doelpunten uitclub, dan 3 punten voor de thuisclub
Als # doelpunten thuisclub < # doelpunten uitclub, dan 3 punten voor de uitclub
Als # doelpunten thuisclub = # doelpunten uitclub, dan 1 punt voor de thuisclub en 1 punt voor de uitclub.
3. dan moet dat scriptje dus elke gespeelde wedstrijd in de tabel doelpunten nalopen, en daar de wedstrijdpunten voor uitrekenen, deze tijdelijk in haar geheugen ergens opslaan (met cache?), dan voor elke club allemaal optellen en weer onthouden.
4. Dan ook nog de gemaakte doelpunten voor en tegen uit de tabel doelpunten voor elke club bij elkaar optellen en tijdelijk (met cache?) in het geheugen opslaan.
5. Dan ook nog bepalen dat bij gelijk aantal wedstrijdpunten het doelpuntensaldo bepalend is voor de stand.

Erg ingewikkeld allemaal voor dus mij.

Kan iemand mij misschien een beetje proberen te helpen?
Gewijzigd op 06/08/2013 13:25:04 door Jo Immanuel
 
PHP hulp

PHP hulp

24/11/2024 07:18:49
 
Jeroen Jansen

Jeroen Jansen

06/08/2013 14:40:45
Quote Anchor link
Ik zou persoonlijk nog een tabel score toevoegen, waarin je de uitslag opslaat (socre_id, score_wedstrijd, score_thuis, score_uit).
De stand kun je dan op de volgende manier in sql ophalen:
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
SELECT    clubs.clubid,
          clubs.clubnaam as Teamnaam,
          coalesce(SUM(x.gespeeld),0) as Wedstrijden,
              coalesce(SUM(x.winst),0) as Winst,
              coalesce(SUM(x.gelijk),0) as Gelijk,
              coalesce(SUM(x.verlies),0) as Verloren,
              coalesce(SUM(x.punten),0) as Punten,
              coalesce(SUM(x.voor),0) as Voor,
              coalesce(SUM(x.tegen),0) AS Tegen,
               coalesce(SUM(x.voor),0) - coalesce(SUM(x.tegen),0) AS Saldo
FROM      clubs
left join

(
    SELECT wedstrijd.wedstrijd_thuisteam as team_id
    , 1 as gespeeld
    , IF(score.score_thuis > score.score_uit, 1,0) as winst
    , IF(score.score_thuis < score.score_uit, 1,0) as verlies
    , IF(score.score_thuis = score.score_uit, 1,0) as gelijk
    , CASE WHEN score.score_thuis > score.score_uit THEN 3 WHEN score.score_thuis < score.score_uit THEN 0 ELSE 1 END as punten
    , score.score_thuis as voor
    , score.score_uit as tegen
    FROM score INNER JOIN wedstrijd ON score.score_wedstrijd = wedstrijd.wedstrijd_id

    UNION ALL

    SELECT wedstrijd.wedstrijd_uitteam as team_id
    , 1 as gespeeld
    , IF(score.score_thuis < score.score_uit, 1,0) as winst
    , IF(score.score_thuis > score.score_uit, 1,0) as verlies
    , IF(score.score_thuis = score.score_uit, 1,0) as gelijk
    , CASE WHEN score.score_thuis < score.score_uit THEN 3 WHEN score.score_thuis > score.score_uit THEN 0 ELSE 1 END as punten
    , score.score_uit as voor
    , score.score_thuis as tegen
    FROM score INNER JOIN wedstrijd ON score.score_wedstrijd = wedstrijd.wedstrijd_id

) as x ON clubs.clubid = x.team_id
group by clubs.clubid
order by punten desc, wedstrijden asc, saldo desc, voor desc, tegen asc
Gewijzigd op 06/08/2013 14:42:57 door Jeroen Jansen
 
Erwin H

Erwin H

06/08/2013 14:56:37
Quote Anchor link
Jeroen Jansen op 06/08/2013 14:40:45:
Ik zou persoonlijk nog een tabel score toevoegen, waarin je de uitslag opslaat (socre_id, score_wedstrijd, score_thuis, score_uit).
De stand kun je dan op de volgende manier in sql ophalen:

Dat zou ik alleen doen als het een aanzienlijke performance verbetering oplevert (waarvan ik zo niet kan zeggen of het nodig is). De reden om het niet te doen is de reden die de TS zelf al gaf: het levert je dubbele data op.
Jo Immanuel op 06/08/2013 13:21:29:
In principe (/in grote lijnen) lijkt het mij dat je een stand van de competitie als volgt middels sql query ophaalt:

Ik zou de punten die je gaf iets anders opstellen (bottom up):
1) bepaal per wedstrijd de uitslag, het aantal punten (uit/thuis) en het doelsaldo (uit/thuis)
2) bepaal per club de gespeelde wedstrijden en het daarin behaalde resultaat (punten, totale doelsaldo) en sommer het
3) sorteer de hele mikmak

Zo op het eerste gezicht moet dit kunnen in 1 query. Wel een behoorlijk complexe query en niet in een paar regels (meerdere joins), maar ik denk dat het mogelijk. Probeer echter eerst punten 1 en 2 afzonderlijk te doen.
 
Jo Immanuel

Jo Immanuel

06/08/2013 15:13:03
Quote Anchor link
He Jeroen,

Bedankt voor je antwoord. Ik ben momenteel niet in staat om hem uit te proberen. Maar dit is helemaal sql en geen php niet?

Mij is wijsgemaakt dat het beter is om dit middels php te doen, onder meer ivm onderhoudbaarheid van de database. (wat is trouwens beter voor performance?)

Doe je het toch met een extra tabel 'score' is het dan ook mogelijk dat je zon tabel zichzelf automatisch laat vullen? Dus, dat je een soort hulptabel score hebt waar voor elke wedstrijd een score (regel) is en die zn gegevens haalt uit de andere tabellen?

tabel wedstrijdscore (PK: scoreID, FK: wedstrijdID) en de volgende 4 kolommen: '#doelpunten thuisclub', '#doelpunten uitclub', '#punten thuisclub', '#punten uitclub'.

Is het dan ook mogelijk om de boel zo in te richten dat de velden van die laatste vier kolommen automatisch gevuld worden aan de hand van de vulling van de tabel doelpunten?

Waarschijnlijk zal dit vanuit het oogpunt van de geldende regels wat betreft databases allemaal wel een doodzonde zijn, maar ik denk wel dat zoiets de berekening van een stand een stukkie makkelijk maakt zonder dat je het extra tijd kwijt bent aan databasevulling.
 
Jeroen Jansen

Jeroen Jansen

06/08/2013 15:28:23
Quote Anchor link
Jo,

mijn oplossing geeft inderdaad puur op SQL de stand.
Je kunt inderdaad wel de score laten vullen op basis van de waarden in de tabel doelpunten, maar let op dat er ook eigen doelpunten kunnen zijn (hoe handel je die in je huidige opzet af?).
In mijn oplossing heb je inderdaad wel dubbele gegevens, maar in mijn eigen opzet heb ik er redelijk wat voordeel (gemak) van door met een aparte tabel voor de scores te werken en gaat het ook redelijk snel (al is dat met een database met daarin op dit moment 3500 wedstrijden verdeeld over zo'n 30 competities niet zo heel zwaar)
 
Jo Immanuel

Jo Immanuel

06/08/2013 15:41:08
Quote Anchor link
Hallo Erwin,

Ja, ik ben dus nog steeds een noob wat betreft sql/php. Dus dit gaat allemaal wel een beetje hard voor mij.

Jij zegt dat het allemaal wel in 1 (comlexe) sql query past. Maar volgens mij heb je daar toch ook php voor nodig? Als ik bijvoorbeeld per wedstrijd de uitslag, het aantal punten (uit/thuis) en het doelsaldo (uit/thuis) ga bepalen, dan moet ik dat uit mijn tabel doelpunten halen. En dan moet je toch dingen gebruiken als "if #doelpunten thuisclub > #doelpunten uitclub dan drie punten voor thuisclub etc.
Kan dat allemaal met sql?

En wat ik helemaal moeilijk te bevatten vind is dat het allemaal (dus punt 1 en 2) gecombineerd en (vooral) tijdelijk onthouden kan worden en je het uiteindelijk kan rangschikken.

Ik als leek denk dat behoorlijk wat performace gaat kosten. Ook wordt het voor mij heel moeilijk om die complexe query te gaan fabriceren. Ik vind een joint in een query al best lastig.

Zon idee wat hierboven geopperd is (dus met een extra tabel wedstrijduitslag (of eventueel extra uitslagenkolommen in de tabel wedstrijden)) zou de boel toch al wat makkelijker maken denk ik. Heb je misschien wat meer (dubbele informatie), maar is dat nou zo erg? En al helemaal niet als je het zo weet in te richten dat die extra uitslagtabel (of die extra uitslagkolommen) automatisch gevuld worden. Kost het je niet meer werk om die database te onderhouden.
 
Erwin H

Erwin H

06/08/2013 15:50:06
Quote Anchor link
Jo Immanuel op 06/08/2013 15:41:08:
Jij zegt dat het allemaal wel in 1 (comlexe) sql query past. Maar volgens mij heb je daar toch ook php voor nodig?

Nee, ik denk dat het in 1 keer kan in een query. Ik heb het niet helemaal uitgewerkt, maar zo te zien kan het wel. Daarmee hoef je dus niets te 'onthouden'.
Jo Immanuel op 06/08/2013 15:41:08:
Ik als leek denk dat behoorlijk wat performace gaat kosten. Ook wordt het voor mij heel moeilijk om die complexe query te gaan fabriceren. Ik vind een joint in een query al best lastig.

Mogelijk dat het performance technisch een probleem wordt, dat is zo niet in te schatten (dat wordt namelijk ook bepaald door de grote van je tabel, de server waar het op draait etc). In eerste instantie zou ik echter altijd gaan voor de beste oplossing (lees: geen dubbele data en oplossing puur in SQL) en alleen als dat niet haalbaar is de alternatieven gaan bekijken.

Overigens is het een JOIN, een joint rook je....
Jo Immanuel op 06/08/2013 15:41:08:
Zon idee wat hierboven geopperd is (dus met een extra tabel wedstrijduitslag (of eventueel extra uitslagenkolommen in de tabel wedstrijden)) zou de boel toch al wat makkelijker maken denk ik. Heb je misschien wat meer (dubbele informatie), maar is dat nou zo erg? En al helemaal niet als je het zo weet in te richten dat die extra uitslagtabel (of die extra uitslagkolommen) automatisch gevuld worden. Kost het je niet meer werk om die database te onderhouden.

Nee, wat mij betreft is dat geen mooie oplossing en daarmee ook geen betere. Het is voor een beginner misschien 'makkelijker', maar de makkelijkste weg levert je vaak later problemen op. Bij databases is zo ongeveer het ergste probleem dat je kan krijgen is inconsistente data. Stel dat op zeker moment in je standen tabel 3-0 voor een wedstrijd staat, maar in je doelpunten tabel maar 2 doelpunten voor die wedstrijd. Dan is het moeilijk te achterhalen waar het fout ging.

Overigens is een automatische databasevulling een utopie. Dat bestaat niet. Je zou met triggers kunnen werken, je zou in php iets kunnen schrijven, maar dat kan altijd een keer mis gaan en dan zit je dus met inconsistente data.

Dus ik zou niet gaan voor de oplossing van Jeroen, tenzij het voor de performance echt nodig is. Maar mijn mening is ook maar een mening.
 
Jo Immanuel

Jo Immanuel

06/08/2013 15:53:38
Quote Anchor link
Hallo Jeroen,

Eigen doelpunten moet toch geen probleem zijn?

Als je een tabel doelpunten heb dan 'boek' je een eigen doelpunt van de uitclub gewoon als een doelpunt van de thuisclub (wat het in feite ook gewoon is). Dat het een eigen doelpunt is kun je dan afleiden/halen uit het feit dat of de doelpuntenmaker niet speelt bij de scorende ploeg of je neemt een aparte kolom op waarin je aangeeft of het al dan niet een eigen doelpunt is.

Maar jij zegt dus dat het kan. Dus dat je ervoor kunt zorgen dat velden uit een bepaalde tabel automatisch gevuld worden aan de hand van de waarde van velden uit andere tabellen. Concreet dus dat bij tabel wedstrijdscore de velden #doelpunten thuisclub en #doelpunten uitclub automatisch gevuld naar aanleiding van de vulling van de tabel doelpunten. En als je een nieuw doelpunt toevoegt in die tabel doelpunten dat de vulling van de velden in tabel wedstrijdscore vanzelf mee veranderen.

Maar hoe doe ik dat dan?
 
Jeroen Jansen

Jeroen Jansen

06/08/2013 15:58:18
Quote Anchor link
Erwin,

ben het met je eens dat het beter is om de tabel score weg te laten en de uitslag te bepalen op basis van de tabel met doelpunten. In mijn database heb ik hiervoor niet gekozen omdat ik uitslagen vastleg voor een amateurvereniging, waarbij ik niet het scoreverloop weet van elke wedstrijd en daarom heb ik gekozen voor een tabel score.


Toevoeging op 06/08/2013 16:02:32:

Jo,

bij het opslaan van het doelpunt zou ik na het wegschrijven van het record een tweede sql uitvoeren die de tabel score bijwerkt.
 
Erwin H

Erwin H

06/08/2013 16:02:34
Quote Anchor link
Ah ok, dat is dan een andere situatie waarin je ook geen dubbele data hebt. In dat geval is er niets aan de hand.
 
Jeroen Jansen

Jeroen Jansen

06/08/2013 16:03:52
Quote Anchor link
Erwin,

wel gedeelte dubbele informatie (voor de teams van mijn eigen vereniging weet ik vaak wel de doelpuntenmakers), maar dat neem ik toch maar voor lief
 
Jo Immanuel

Jo Immanuel

06/08/2013 16:07:55
Quote Anchor link
Hallo Erwin,

Nou precies, daar ben ik dus ook bang voor. Voor het gevaar van een incosistente database. En automatische database vulling (waarbij het ene veld automatisch gevuld wordt naar aanleiding van de vulling van andere velden) bestaat dus blijkbaar niet (million dollar idea???).

Zou je me dan een beetje weg kunnen helpen hoe ik zon complexe sql query opbouw? Want ik ben lost.
 
Erwin H

Erwin H

06/08/2013 16:17:13
Quote Anchor link
Nee, geen million dollar idea, want dat is nu juist niet het idee van een relationele database.

Begin bij het begin voor die query. Dus pak je wedstrijden tabel en doelpunten tabel en probeer de volgende informatie eruit te halen (in 1 query dus):
- wedstrijd
- thuis club (id)
- uit club (id)
- doelpunten thuis
- doelpunten uit

Heb je dat, dan volgt stap 2:
Selecteer twee extra (vurtuele) kolommen waarin de punten staan voor de uit en thuis club (dus 0, 1 of 3).

Daarna stap 3:
Pak de clubs tabel en selecteer bij elke club het totaal aantal wedstrijden, punten en doelpunten door de net gemaakt (sub)query in stap 1 en 2, te joinen aan de clubs tabel.

Daarna stap 4:
Groupeer op club en sorteer.

Maar begin bij stap 1 :-)
 
Jo Immanuel

Jo Immanuel

06/08/2013 16:54:57
Quote Anchor link
Bedankt Erwin,

Ik ga vanavond en morgen even rustig kijken en knutselen.

Bij stap 1 dus tabel wedstrijden joinen met tabel doelpunten. En dan als uitkomst/resultaat alle? gespeelde wedstrijden met bijbehorden thuis en uitclub en bijbehorden doelpunten zodat je uiteindelijk een hele lijst krijgt?
En moeten de bij de verschillende wedstrijden behorende doelpunten bij stap 1 ook al opgeteld worden of moet alleen bij iedere wedstrijd de bijbehorende doelpuntenID's als resultaat gegeven worden?

Dat ga ik eerst proberen. De twee extra virtuele kolommen waarin de punten staan voor de uit en thuis club ga ik zeker nog hulp bij nodig hebben, maar das van latere zorg.

Even resumerend: als ik het dus goed begrepen heb maak je eigenlijk doormiddel van die sql query 1 grote samengevoegde tabel met de benodigde informatie om uiteindelijk in stap 4 te kunnen groeperen en sorteren en dat is de reden dat er geen dingen onthouden hoeven worden?


PS: million idea was natuurlijk een grapje. Aan de andere kant: zo gek is het idea nog helemaal niet, al zeg ik het zelf. Kijk, incosistente database hoeft helemaal geen probleem te zijn. Als de afgeleide velden afhankelijk zijn van andere velden en altijd mee veranderen bij verandering in die andere velden kun je zo ook geen incostente database krijgen lijkt me. (Ook best wel relationeel allemaal). Gewoon een kwestie van afschermen voor handmatige invoer (kinderslotje). Nadeel: dubbele gegevens. Voordeel: minder rekencapaciteit?
Gewijzigd op 06/08/2013 16:57:15 door Jo Immanuel
 
Erwin H

Erwin H

06/08/2013 17:02:48
Quote Anchor link
Over het resumeren: ja, dat is zo'n beetje het idee.
Of je dan al in stap 1 dingen moet gaan optellen is aan jou. Uiteindelijk wil je dat, maar bij dit soort complexere queries wil je het stap voor stap uitwerken. Ik heb je vier stappen gegeven, maar misschien maak je zelf nog wel veel meer van. Voor mij is een join maken iets wat ik dagelijks doe, maar misschien dat jij dat als aparte stap wilt hebben om zo dat eerst helemaal goed te krijgen.

Ik begrijp dat de opmerking over dat idea niet helemaal serieus was. Wat je nu echter zegt ben ik het echt niet mee eens. Inconsistente data is wel een probleem, het is een van de grootste problemen in een relationele database. Hoe dan ook wil je dat vermijden en de eerste stap daarvoor is niets dubbel opslaan. Alleen, en echt alleen, als een query dusdanig zwaar is en er geen andere optie dit kan verzachten zou ik data dubbel gaan opslaan. Dit komt echter dusdanig weinig voor dat ik er niet al te lang over zou nadenken.
Het gaat overigens ook niet over handmatige invoer perse waar het fout kan gaan. Denk ook aan updates, deletes, maar ook aan acties die halverwege mis gaan. De ene tabel wel geupdate, de ander niet. Nu heb je daar wel weer transacties voor, maar die werken ook weer niet in elke engine.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

06/08/2013 18:51:46
Quote Anchor link
Erwin H:
Voor mij is een join maken iets wat ik dagelijks doe

Gelukkig maar dat je het niet zoals Jo schrijft :-P

Jo, alvast een tip:
Je moet in stap 1 de doelpunten tabel 2x joinen, 1x voor de thuisclub en 1x voor de uitclub.

Ik denk dat het in dit geval ook verstandig is om voor de uitslagen een view te maken.
Daarna kan je in de query van Jeroen de tabel vervangen door de view (scheelt je stap 2, 3 en 4).

Ik sluit me trouwens aan bij de slotopmerking van Erwin, het voordeel aan performance is in dit geval nihil bij dubbele data, een paar join(tj)es meer of minder weegt niet op tegen het uithalen van allerlei capriolen om je database consistent te houden.
Gewijzigd op 06/08/2013 18:57:42 door Ger van Steenderen
 
Lendl Verschoor

Lendl Verschoor

06/08/2013 20:24:38
Quote Anchor link
Je maakt goed een koppel tabel aan, maar vervolgens doe je er niks mee.
de koppel tabel kan je weer gebruiken voor je doelpunten zodat je weet wie er van welk team heeft gescoord.
 
Jo Immanuel

Jo Immanuel

07/08/2013 13:16:33
Quote Anchor link
Ok, ik heb zojuist een aantal doelpunten ingevoerd bij tabel doelpunten, maar loop eigenlijk gelijk al tegen een probleem/vraag aan (wat betreft database-inrichting).

Hoe kan ik de tabel doelpunten het beste inrichten?

Ik ga straks om de stand te berekenen tabel doelpunten joinen met tabel wedstrijden. In tabel wedstrijden staan de clubID's van de 2 clubs die in een bepaalde speelronde en op een bepaalde datum en tijd tegen elkaar spelen. In tabel doelpunten staat in mijn (oorpsronkelijke) inrichting ook een clubID voor de club waarvoor het doelpunt is gescoord. Nu ben ik door het voorgaande in dit topic een beetje bang geworden voor data-inconsistentie. Wanneer ik bijvoorbeeld bij de invoer van een doelpunt een foutje maak bij de waarde van clubID dan krijg je denk ik een data-inconsistentie als deze waarde niet overeenkomt met 1 van de twee clubID's die bij de wedstrijdID horen die is meegegeven bij de invoer van het doelpunt.

Hoe pak ik dit het beste aan om data-incosistentie te voorkomen?

Is het mogelijk dat bij de invoer van een doelpunt in mysql, nadat je de bijbehorende westrijdID hebt ingevuld, je alleen kan kiezen tussen de clubID's van 1 van de 2 clubs die horen bij de wedstrijdID die is ingevoerd? (of is dit wederom een 'million dollar idea'?)
Of moet ik dit anders aanpakken door bijvoorbeeld geen clubID mee te geven bij het invoeren van een doelpunt maar alleen in een kolom aan te geven of het doelpunt door club "thuis" of "uit" is gemaakt?
 
Erwin H

Erwin H

07/08/2013 13:31:53
Quote Anchor link
Een oplossing is inderdaad om gewoon wedstrijd id op te geven en daarbij uit of thuis. Daarmee is volledig gedefinieerd voor welk team het doelpunt gescoord is, aangezien in de wedstrijd tabel staat wie de uit en thuis ploegen zijn. Eigenlijk, als je hier wel het club id zou opgeven krijg je alweer dubbele data wat je niet wilt.

Overigens zou het misschien ook wel kunnen om via foreign keys af te dwingen dat alleen een bepaalde combinatie van wedstrijd id en club id mag worden ingevoerd, maar dan krijg je een foreign key over meerdere velden. Om eerlijk te zijn gaat dat me ook net weer boven de pet, misschien dat Ger er een antwoord op heeft.

Volgens mij is oplossing 1 (uit/thuis, geen club id) echter voldoende en net zo efficient.
Gewijzigd op 07/08/2013 13:33:51 door Erwin H
 
Jo Immanuel

Jo Immanuel

07/08/2013 13:58:19
Quote Anchor link
Bedankt Erwin,

Ik had zelf ook al gekozen voor het invullen van "uit" of "thuis" in plaats van een wedstrijdID bij de vulling van tabel doelpunten. Lijkt me het meest veilige en bij de invoer van een doelpunt ook wel zo handig. Hoef je namelijk niet steeds de clubID van een bepaalde club op te zoeken.

Overigens ben ik nu met stap 1 bezig, maar ik weet nou eigenlijk niet precies wat voor resultaat ik zou moeten krijgen.

Is het de bedoeling dat het volgende resultaat/lijst uit mijn query krijg?

wedstrijd (wedstrijd ID), thuisclub (clubID), uitclub (clubID), doelpunt (doelpuntID), scorende club (uit/thuis)

En dan (in eerste instantie) voor elk doelpunt(ID) een regel? En later (noem het stap 1B) als ik die doelpunten uit en thuis ga optellen het volgende resultaat krijg?

wedstrijd (wedstrijd ID), thuisclub (clubID), uitclub (clubID), #doelpunten thuis (getal),#doelpunten uit (getal)

Zodat ik voor elke wedstrijd(ID) een regel heb?
Gewijzigd op 07/08/2013 14:00:52 door Jo Immanuel
 
Erwin H

Erwin H

07/08/2013 14:01:28
Quote Anchor link
Lijkt me inderdaad een goed begin om het zo te doen. Zorg eerst dat je de tabellen correct joint (ahum) en daarna maak je die sommaties.

Toevoeging op 07/08/2013 14:04:15:

Overigens let ook even op wat Ger zei:
Ger van Steenderen op 06/08/2013 18:51:46:
Jo, alvast een tip:
Je moet in stap 1 de doelpunten tabel 2x joinen, 1x voor de thuisclub en 1x voor de uitclub.

Hoewel ik me nu zit te bedenken dat het mogelijk ook wel goed gaat met 1 join.... Hmm, zal interessant worden om dat later nog uit te zoeken....
 

Pagina: 1 2 3 volgende »



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.