stand competitie uitrekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fullstack developer

Functie omschrijving We are looking for a dutch native speaker Wil jij werken als Senior Developer en werken aan een applicatie die duizenden marketingcampagnes automatisch aanstuurt? Dit is je kans! Kom werken voor onze opdrachtgever en in deze rol zul je veel vrijheid en verantwoordelijkheid krijgen om gezamenlijk de applicatie naar een hoger plan te tillen. Wat ga je verder doen: Optimaliseren, beheren en uitbreiden van onze applicatie; Het bouwen van aansluitingen op de systemen van partners middels API’s; Meedenken over de technische/ontwikkel-standaarden; Proactief verbeterpunten voorstellen. Bedrijfsprofiel Het is een organisatie die met een team van verschillende developers én marketeers

Bekijk vacature »

SAP Integratie Ontwikkelaar

Ben jij ambitieus in de verdere ontwikkeling van SAP binnen HANOS, en heb je kennis van SAP PI, CPI (SAP integration suite) en of andere middleware tooling? Dan ben jij mogelijk onze nieuwe SAP Integratie (middleware) Ontwikkelaar! Lees snel verder en solliciteer! Wat ga je doen? Als SAP Financieel Consultant ben je, als deel van een gedreven team van interne SAP consultants, de schakel tussen de gebruikersorganisatie en ICT. Je draagt proactief bij aan een optimale aansluiting van de SAP-functionaliteit (een applicatielandschap met o.a. Suite on HANA, Fiori, Hybris, C4C en BO), op de bedrijfsprocessen. Verder ondersteun je de HANOS

Bekijk vacature »

Implementatie specialist

Standplaats: Honselersdijk Aantal uren: 32 – 40 uur Opleidingsniveau: HBO werk- en denkniveau Ben jij de implementatie expert die onze klanten helpt bij het integreren van de Greencommerce software? Ben jij daarnaast communicatief sterk, denk jij graag in verbeteringen en heb je ervaring met ICT? Lees dan snel verder! Bedrijfsinformatie Jem-id is een grote speler op het gebied van software ontwikkeling. Zo zijn wij continu bezig met het ontwikkelen van de meest innovatieve software voor de AGF- en sierteeltsector. We creëren oplossingen die er toe doen en verbinden klanten niet alleen op technisch vlak, maar zoeken ook de verbinding in

Bekijk vacature »

Lasrobotprogrammeur/operator

Heb je interesse in trekkers en beschik je overvlijmscherpse precisie? Solliciteer dan op deze vacature! Als Lasoperator ben je vooral bezig met het maken van nieuwe lasrobotprogramma’s en het optimaliseren van bestaande programma’s, zowel online als offline (incl. het bedienen van de Lasrobots). Daarnaast draag je bij aan een optimaal rendement van de las robots. Verder heb je de volgende werkzaamheden: Het meewerken als operator c.q. Robotlassen niveau 2 (van complexe samenstellingen/halffabricaten), het om- en instellen van de diverse stations van lasmallen (productdragers), het afwerken van laswerk (verwijderen lasspetters en oxiden), het bewaken van de machineplanning (op bewerkingen) incl. de

Bekijk vacature »

C#.NET/Unity Developer

Functieomschrijving Voor een gewaardeerde werkgever in de omgeving van Breda zijn wij op zoek naar een software ontwikkelaar. Dit bedrijf houdt zich bezig met de ontwikkeling van WMS Software (C#/Unity & SQL). Past dit bij jou? Lees snel verder! Jouw werkzaamheden zullen er als volgt uitzien: Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van processen; Samen met 6 applicatieontwikkelaars hebben jullie de verantwoordelijkheid voor de uitbreiding en ontwikkeling van de webapplicaties; Het uitvoeren van updates/aanpassingen aan de huidig draaiende applicaties; Je bent een luisterend oor naar klanten en vertaalt hun wensen door naar bruikbare software. Bedrijfsprofiel Wie

Bekijk vacature »

Lead React Developer

Dit ga je doen Als Lead React Developer zul jij je voornamelijk gaan bezighouden met: Het werken aan tal van uiteenlopende projecten waar gloednieuwe (web)applicaties van scratch af aan ontwikkeld worden met o.a. React (Native) en Drupal; Het aansturen van een team bestaande uit 5-6 talentvolle en gedreven ontwikkelaars; Het adviseren en meedenken over nieuwe (technische) oplossingen en te gebruiken tools/frameworks; Het meedenken over de architectuur en de juiste implementatiebeslissingen maken; De doorontwikkeling van huidige applicaties. Hier ga je werken Als je inderdaad een ervaren Lead React Developer bent die zichzelf graag nog verder wil ontwikkelen dan is het goed

Bekijk vacature »

Java Developer

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

C#.NET ontwikkelaar

Functie omschrijving Voor een softwarebedrijf in de omgeving van Veghel zijn we op zoek naar een C# developer. Word jij blij van ontwikkelen in C# en .NET? Lees dan snel verder! Jouw werkzaamheden zullen er als volgt uit gaan zien: Op basis van de wensen van de klant ga je samen met je collega's ga je op zoek naar de juiste oplossingen en je gaat dit uitwerken tot een mooi eindproduct. Je bouwt webshops, webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Framework en C#. Je zorgt voor de optimalisering van bestaande software en de automatisering van

Bekijk vacature »

Front-end PHP Developer

Dit ga je doen Bouwen van de frontend van een nieuwe applicaties; Verbeteren van de user experience; Opstellen van een style guide; Schakelen met collega developers over de te bouwen oplossing; Je speelt een belangrijke rol in het neerzetten van het nieuwe systeem; Werken met o.a. Symfony 6, API Platform, Twig, Javascript, Redis Automatiseren van processen; Koppelen van verschillende functionaliteiten; Unit tests, integration tests, end-to-end tests; In de toekomst ga je nog werken aan andere projecten. Hier ga je werken Voor onze vaste opdrachtgever in de regio Breda zijn wij op zoek naar een Frontend Developer. Het betreft een organisatie

Bekijk vacature »

C#.NET-developer - JUNIOR

Functie omschrijving Voor een leuke opdrachtgever in omgeving Brielle zijn wij op zoek naar een junior developer. Werk jij graag met de volgende tools & technieken? C#, .NET, ASP.NET, MVC en SQL? Kijk dan snel of dit iets voor jou is! Als programmeur bij een productiebedrijf zal je voornamelijk nieuwe software schrijven maar ook bestaande software verbeteren. Verder werk je veel samen in back end projecten met leuke collega's. Bedrijfsprofiel Met een team van ruim 130 personen staan ze elke dag weer klaar om IT en Business te combineren door het ontwikkelen van producten op maat. Er zijn 3 teams,

Bekijk vacature »

Junior PHP Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale aspecten van Coolblue. Wat doe je als Junior PHP Developer bij Coolblue? Als Junior PHP Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen om te groeien als Junior Developer. Op dat moment komt je wil om steeds te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te kunnen maken. Je sterk analytisch vermogen komt dan ook goed

Bekijk vacature »

T-SQL Database developer

Functie omschrijving Ben jij een ETL database specialist? Houd jij ervan om te puzzelen met Databases, Query's & Stored procedures? Zoek jij uitdaging, vrijheid en verantwoordelijkheid? Zoek dan niet verder! Wij zijn per direct op zoek naar medior en senior database developers. Je gaat werken voor een relatief klein softwarebedrijf in omgeving Tilburg. Samen met 12 collega's (allemaal techneuten), ga jij je bezig houden met het bouwen en/of onderhouden van database software. Deze software wordt internationaal ingezet voor het automatiseren van logistieke processen. Jouw werkzaamheden gaan er als volgt uit zien: Je bent in een klein team met developers, verantwoordelijk

Bekijk vacature »

Software Ontwikkelaar .NET te Zaandam

Bedrijfsomschrijving Je komt hier terecht bij een door-en-door softwarebedrijf, waarbinnen meerdere SaaS pakketten worden ontwikkelt voor diverse sectoren. Hierbij kun je denken aan bijvoorbeeld de logistieke en medische branche. Deze organisatie kenmerkt zich door de hoge mate van complexiteit in de applicaties, wat betekent dat jij je hier niet zal gaan vervelen. Integendeel: Jij gaat hier elke dag ontzettend veel leren en je in razend tempo ontwikkelen als C# .Net Developer met focus op back-end. Het team bestaat uit ongeveer 20 personen personen, waarvan het grootste deel zich richt op software development. De sfeer is informeel en professioneel. De producten

Bekijk vacature »

Software developer

Functie Momenteel zijn ze op zoek naar een Software developer die, veelal fullstack, mee gaat werken aan de ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP),

Bekijk vacature »

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

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

18/02/2025 23:24:38
 
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.