stand competitie uitrekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Grafisch vormgever

Standplaats: Maasland Aantal uren: 32 – 40 uur per week Opleidingsniveau: HBO werk- en denkniveau Ben jij een ambitieuze grafisch vormgever met een passie voor creativiteit en oog voor detail? Vind jij het daarnaast leuk om ook marketingactiviteiten op te pakken? Dan zijn wij op zoek naar jou! Bedrijfsinformatie Westacc Group BV is het zusterbedrijf van HABA en specialiseert zich in (maatwerk) oplossingen voor (elektro) techniek en verlichting in de kampeerbranche. Zij produceren en assembleren onderdelen voor caravans, campers en boten. Voor een groot aantal caravan- en campermerken leveren wij producten als zekeringkasten, invoerdozen, acculaders, schakelmateriaal en verlichting. De producten

Bekijk vacature »

.NET Developer

Functie omschrijving Jij gaat in de functie van Software Developer werken met C# en .NET framework. Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met back-end development. Verder staat dit

Bekijk vacature »

Full stack Python developer

Functie Samen met andere collega’s (een product owner, een software manager en een ervaren ontwikkelaar) ga jij onze producten verder ontwikkelen. Jouw verantwoordelijkheden zullen bestaan uit: – Verder wil gaan met de ontwikkeling van onze bestaande producten; nieuwe features! – Meedenkt over de roadmap van onze producten – Als sparringpartner kan optreden op het gebied van development – Zelf ook nieuwe ideeën op tafel durft te leggen en deze van scratch af aan wilt bouwen Hieronder ook een paar voorbeelden van projecten waar we momenteel mee bezig zijn of binnenkort aan willen beginnen: – Real-time interactie creëren in onze web

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Programmeren van zelflerende robots Werken op kantoor en testen in de bedrijfshal Je krijgt verantwoordelijkheid, vrijheid en je mag werken naar eigen inzicht De organisatie Hier ga je aan de slag Een bedrijf dat innovatieve robottoepassingen ontwerpt en bouwt voor onder andere de staal industrie, energie- bouw- en agrarische sector. De robots die vaak in combinatie met diverse randapparatuur geleverd worden vormen een totaaloplossing voor de klant. Dit zijn klanten over de hele wereld, van België en Duitsland tot China, India, maar ook in Nederland. Projecten waar momenteel aan wordt

Bekijk vacature »

Java developer - procesoptimalisatie (Inhouse)

Functie Wat ga je doen als Java developer? Jij als back end developer hebt al enige ervaring opgedaan in jouw vakgebied. Voornamelijk het werken met Java en Spring spreekt jou aan. Jij wordt samen met je collega developers in het team verantwoordelijk voor de gehele back end van de applicatie. Hierdoor heb jij veel zelfstandigheid in je rol en zul je ook zelf beslissingen samen met de PO maken. Er wordt gewerkt volgens de SCRUM methodiek, om zo structuur te creëren in de werkzaamheden. Binnen de 2-wekelijkse sprints pak jij je taken op die samen met de PO afgestemd zijn.

Bekijk vacature »

.NET developer

Functie Als .NET ontwikkelaar start jij in een multidisciplinair team met 7 ontwikkelaars. Dit team is verdeeld onder Front-end ontwikkelaars en backend developers. De backend developers werken voornamelijk aan desktop applicaties in combinatie met backend systemen. Hier ga jij dus ook mee aan de slag! Hierbij wordt voornamelijk gebruik gemaakt van C# .NET, WPF, UWP, XAML en MVVM. WPF, UWP, .NET Core, Azure Devops en Entity Framework. WPF en UWP worden dan ook voornamelijk gebruikt voor de user interface van de desktop applicatie. Het development team is dan ook erg gedreven m.b.t. het ontwikkelen van vooruitstrevende en innovatieve horeca automatiseringsoplossingen.

Bekijk vacature »

PHP Developer

Functie Middels Scrum en sprints bouw jij in deze functie mee aan complexe webapplicaties en ons SaaS platform. Hierbij hoort ook architectuur tot een van je taken. Daarnaast ben je één van de leden van het Scrum team. Dat betekent dat je naast je kerntaken ook in contact staat met de product owner. Oftewel, je bent bij het gehele ontwikkelproces betrokken. Tools die hierbij gebruikt worden zijn o.a. PHP, Symfony en Git. Eisen • Minimaal HBO werk- en denkniveau • Minimaal 3 jaar aantoonbare ervaring met PHP • Kennis en ervaring Symfony (Laravel is pré) & Lando • Kennis van

Bekijk vacature »

C# .NET Software Ontwikkelaar

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Arnhem gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Als C# .NET Developer binnen dit bedrijf houd je je niet alleen bezig met het verbeteren van

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

Front-end Developer Magento 2/Wordpress

Voor het aantrekkelijk houden en steeds vernieuwen van de huidige websites en webshops en het meedenken in de marketing zijn wij per direct op zoek naar een ervaren Front-end developer met gedegen kennis van Magento 2 (webshops) en Wordpress (websites). Wat bieden wij jou Mooi salaris! Meteen op contract bij de opdrachtgever! Gezellig, Kempisch bedrijf! 35 uur per week! Auto van de zaak! Wie ben jij Van een front-end developer verwachten wij: Een afgeronde Bachelor ICT opleiding met profiel ICT & Media Design. Dat je in het bezit bent van een Magento 2 professional front-end developer certificaat; Je hebt ruime

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 »

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 »

Fullstack Developer TOTO

Do you want to work with the latest technologies on the development of new systems and applications? Get moving and strengthen Nederlandse Loterij as a Fullstack Developer TOTO. Thanks to your efforts, complex business critical applications are always running smoothly. In this way, you directly contribute to a happy, healthy and sporty Netherlands. As a Fullstack Developer you score by: Taking ownership of the development cycle of an application in a large scale, high availability, geo redundant landscape Coaching your peer developers and safeguarding code quality Integrating the application with other components of the system using the available API’s Managing

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 »

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

19/04/2024 19:55:20
 
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.