stand competitie uitrekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET Developer C# VB

Samengevat: Deze werkgever is actief in software voor het matchen van vraag en aanbod van gebruikte auto-onderdelen. Ben jij een .NET Developer? Heb je ervaring met het ontwikkelen (REST) en integreren van webservices? Vaste baan: C# .NET Developer C# VB HBO €2.600 - €6.200 Wij ontwikkelen software om vraag en aanbod van onderdelen van personenauto's bij elkaar te brengen. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. De branche van dit bedrijf is Automotive. Functie: Voor de vacature als .NET Developer Dordrecht HBO ga je

Bekijk vacature »

PHP Developer

Functie omschrijving Als PHP / Laravel developer zal je in een klein team terecht komen. Wij zijn op zoek naar een echte specialist, iemand die de balans weet te vinden tussen techniek en perfectie. In de aankomende jaren wilt dit bedrijf flink groeien en daarom zijn ze op zoek naar jou! Wat ga je doen? Je draagt bij aan het ontwikkelen en onderhouden van bestaande webapplicaties die boordevol functionaliteit zitten. Deze applicaties worden gebruikt door de organisatie zelf en ook door de klanten. Inmiddels wordt er gewerkt met Laravel 8 en zijn er diverse koppelingen naar externe leveranciers. Verder zal

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Digitale Tovenaar Gezocht: Junior Low-code/No-code

Bedrijfsomschrijving Duik mee in een wereld vol innovatieve avonturen waar gegevens en technologie een magische symbiose aangaan! Al meer dan twee decennia lang zijn we de tovenaars achter de schermen die oplossingen creëren voor de meest complexe klantcontactvraagstukken en datagedreven software-uitdagingen. Bij ons draait het om de kracht van samenwerking en groei. We zijn een hechte vriendengroep die samen bergen verzet om elkaar én onze klanten te laten schitteren. Jouw succes is ons succes en we streven ernaar om elkaar naar nieuwe hoogten te tillen, niet voor even, maar voor altijd. We willen dat jij je helemaal thuis voelt in

Bekijk vacature »

.NET Developer

Functieomschrijving Ben jij klaar voor de volgende stap in jouw carrière? Kom werken bij dit kleine softwarebureau en werk aan de gaafste maatwerk projecten. Je komt te werken in een klein development team en werk nauw samen met elkaar, om maatwerk software te leveren en bij te dragen aan bedrijfsautomatiseringen. Je gaat werken met de Microsoft stack en technieken als .NET, C#, Entity, MVC, SQL server. In de functie krijg je veel vrijheid om zelf beslissingen te nemen en je hebt impact op de bedrijfsprocessen. Bedrijfsprofiel Dit familiebedrijf bestaat al ruim 20 jaar. Zij hebben een vast netwerk van klanten,

Bekijk vacature »

Fullstack Software Developer

Bedrijfsomschrijving Functieomschrijving Java ontwerpen, bouwen en testen (T-shaped). Als senior ontwikkelaar ben je bekend in zowel de back-end als de frontend van een applicatie. Angular, Continious Delivery / Integration. Een ervaren iemand die de leiding kan nemen, een weg vindt in nieuwe situaties, en in oude applicaties. Initiatiefrijk, bekend met de (technische) omgevingen die we bij duo gebruiken, niet te beroerd om collega’s te helpen. Als senior programmeur in staat om op te treden als lead programmeur. Ondersteunt de testers bij de testautomatisering en minder ervaren programmeurs bij dagelijks werkzaamheden. Dit laatste met name op het gebied van Angular. Achtergrond

Bekijk vacature »

Ervaren Software Developer

Functie omschrijving Ben jij een ervaren Software Developer, en heb je ervaring met technieken zoals C#, MS Access & SQL? Vind jij het leuk om maatwerk software te ontwikkelen voor klanten in een specifieke branche? Dan is dit de baan voor jou! Als ontwikkelaar ben jij samen met een team van 12 collega’s verantwoordelijk voor het bouwen van nieuwe functionaliteiten en het uitbreiden van de core applicatie. Belangrijk is dat je ervaring hebt met C# en MS Access. Je bent flexibel en klantvriendelijk ingesteld, omdat het belangrijk is om de klanten zo goed mogelijk van dienst te kunnen zijn. Thuiswerken

Bekijk vacature »

Product Developer (M/F), Fulltime 40 h/week

A global Plantbased revolution – that is our dream. Maximising the protein transition – that is our mission. Producing and developing sustainable and delicious products – that is what we do. Ojah is a fast growing company with a mission and has the ambition to be the world leader in its field. To support this growth we are hiring new colleagues. People that would like to make a difference and dare to dream big. With currently a 150 colleagues proudly working on our exceptional products. Working in a dynamic surrounding that runs full speed ahead. We need you! Product Developer

Bekijk vacature »

Belastingdienst - Freelance Applicatieontwikkelaar

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 6 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Hybride. Kantoordagen in Utrecht, incidenteel in Apeldoorn Functieomschrijving: De afdeling IV – Generieke Voorzieningen – Interactie Online is onderdeel van de keten Interactie. De missie van de keten is: “het faciliteren van de interactie met alle burgers, bedrijven en hun vertegenwoordigers om hen in staat te stellen aan hun fiscale verplichtingen te voldoen en aanspraak te maken op hun rechten.” De afdeling Interactie Online heeft een belangrijke bijdrage binnen deze keten. Dit door het ontwikkelen

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Functioneel Applicatiebeheerder voor het financiele domein op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op

Bekijk vacature »

PHP ontwikkelaar

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

Back-end developer (Magento2)

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Software Developer

Functie omschrijving Heb jij affiniteit met ICT en een WO diploma in de pocket? Dan ben je hier aan het juiste adres. Voor een opdrachtgever in Amsterdam zijn wij op zoek naar kandidaten die (enige) ervaring hebben met Java, Javascript, C of C++. Je zal door middel van trainingen worden opgeleid tot een volwaardige Software Developer. Er wordt tijdens de training natuurlijk veel aandacht besteedt aan de vaktechnische aspecten, maar er gaat ook veel aandacht uit naar jouw persoonlijke ontwikkeling. Bedrijfsprofiel Bij deze opdrachtgever in de omgeving van Amsterdam zoeken ze meerdere enthousiaste kandidaten die hun carrière willen starten met

Bekijk vacature »

Lead javascript developer Node.js React

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

Software Developer

Bij een bedrijf in de machinebouw, regio Roosendaal, zijn we op zoek naar een: Software Developer Waar ga je werken? Onze opdrachtgever is gespecialiseerd in de grondverzetmachines. Al meer dan 50 jaar leveren ze zowel nationaal als internationaal diverse machines. Het is een familiebedrijf met een informele werksfeer. Wat ga je doen? Als Software Developer je verantwoordelijk voor: - Je werkt voortdurend aan oplossingen voor het op afstand bewaken en besturen van oogstmachines; - Het visualiseren van gegevens in rapporten, apps of andere formaten; - Voorspellend machineonderhoud; - Taakplanning; - Je schrijft aangepaste plug-ins om gegevens te importeren of exporteren

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

22/12/2024 18:45:05
 
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.