stand competitie uitrekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

Senior SQR Java Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 13333 Introductie Are you passionate about contributing to the world's most advanced machines. Do you thrive in a challenging environment working with highly motivated and skilled teams? If so, we have the perfect opportunity for you! We are seeking a Senior Software Design Engineer for Sequence Tooling to play a critical role in creating and maintaining mission-critical software applications. In this role, you will focus on achieving maintainable software architecture that is transparent and easy to extend while maintaining a strong focus on software quality. You will work closely with

Bekijk vacature »

Low Code Developer voor o.a. overheidsprojecten!

Bedrijfsomschrijving Wil jij ook behoren tot de specialist in Low Code? Dan zou ik zeker aanraden om verder te lezen. Deze organisatie is ooit opgericht door twee studenten en is inmiddels uitgegroeid tot een serieuze werkgever met een groot aanzien op Low Code projecten. De sfeer is echter niet veranderd, er heerst een informele sfeer met een open deuren beleid, en hierin mag de eigen bar natuurlijk niet ontbreken. Momenteel maakt deze organisatie een flinke groei door en hier kan jij natuurlijk niet bij ontbreken. Daarom ben ik op zoek naar Low Code Developers met een degelijke technische achtergrond. Kennis

Bekijk vacature »

Software Developer

Functie omschrijving In deze functie ga je aan de slag met het door ontwikkelen van de interne software. Zij maken gebruik van een CRM, wat door de hele organisatie gebruikt wordt. Andere taken: Je gaat het CRM-systeem door middel van PHP verder ontwikkelen; Verder bouw je verschillende API's en koppelingen tussen systemen; Ook ga je collega's ondersteunen bij vragen over de software en applicaties; Deelnemen aan overleggen met het development team; Bij interesse is er de mogelijkheid om junioren te gaan begeleiden. Bedrijfsprofiel Dit bedrijf is actief binnen de telecombranche. Het hoofdkantoor zit in regio van Den Bosch en er

Bekijk vacature »

Senior Front end developer Angular

Functie Er zijn momenteel 5 SCRUM-teams waarvan drie gefocust zijn op DevOps en de huidige projecten en twee op innovatie van de platformen. Jij zal onderdeel worden van het innovatie Scrum team. De 2 multidisciplinaire innovatie teams bestaan momenteel uit 14 werknemers. Jij als senior Front end developer wordt onderdeel van onze innovatieteams. De innovatieteams houden zich bezig met het door ontwikkelen van de huidige producten en denken na over nieuwe functionaliteiten. Binnen de rol van Front end developer krijg je veel vrijheid en kan je je dag zelf indelen. Dingen waar jij je dagelijks mee bezig zult houden is

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 »

Medior Front-end Developer

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

Bekijk vacature »

Software Ontwikkelaar

Functie omschrijving Voor een echt familiebedrijf in de omgeving van 's-Hertogenbosch ben ik op zoek naar een Software Developer. 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 Deze organisatie is

Bekijk vacature »

Starter/junior PHP developer

Functie Momenteel zijn ze op zoek naar een junior PHP developer om het team te versterken. Als back-end developer bouw je de enterprise software die hun bedrijf helpt bij haar primaire processen. Afhankelijk van de omvang van het project werk je in een klein team aan een project. Ze hebben dagelijkse stand-ups en elke twee weken een scrumsessie, begeleid door de Scrum Master, waar je je ideeën kunt presenteren en samen met de Product Owner kunt werken aan het beste product. Ze vertrouwen enorm op hun eigen bedrijfssoftware. Dit geeft hun een groot voordeel ten opzichte van hun concurrentie. Zo

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 »

Scrum Master

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 Scrum master op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je begeleidt twee teams binnen de afdeling Platform Services (PLS). Je helpt mee de devops manier van werken van de teams verder door te ontwikkelen. Je helpt de PO bij het managen van de product backlog; het voorbereiden van

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Frontend Developer - Leeuwarden

Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider in onderwijsland. Wat vragen

Bekijk vacature »

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

C#.NET Developer

Functieomschrijving We are looking for a dutch native speaker In deze uitdagende functie ga je werken als onderdeel van het development team, in de functie van C#.NET Developer, Je gaat maatwerk software bouwen voor diverse klanten. Ook optimaliseer je bestaande software en bouw je API koppelingen. Je bent vooral met back-end development bezig. Je krijgt veel vrijheid in deze functie en je krijgt de kans om mee te denken in bedrijfsprocessen. Deels thuiswerken is geen enkel probleem! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van

Bekijk vacature »

Pagina: « vorige 1 2 3 volgende »

Jo Immanuel

Jo Immanuel

07/08/2013 14:45:02
Quote Anchor link
Stap 1A is gelukt middels de volgende query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT tbl_wedstrijden.wedstrijdID, thuisclubID, uitclubID, doelpuntID, thuisclub_uitclub
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID


Resultaat is een hele lijst met voor elk doelpunt een regel.

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
wedstrijdID     thuisclubID     uitclubID     doelpuntID     thuisclub_uitclub
00001     22     15     1     thuis
00001     22     15     2     uit
00002     16     2     3     uit
00002     16     2     4     thuis
00002     16     2     5     thuis
00002     16     2     6     thuis
00002     16     2     7     uit
00003     18     13     8     uit
00003     18     13     9     thuis
00004     14     21     NULL    NULL
00005     7     3     NULL    NULL
00006     8     9     NULL    NULL
enz.

Stuit ik gelijk al op een (toekomstig) probleem dat ik eerder al wel een beetje zag aankomen. Zoals je hierboven ziet heb ik nog maar voor de eerste 3 wedstrijden de (9) doelpunten ingevoerd. Maar ik heb alle wedstrijden van het seizoen al in de database gezet. De uitslagen van wedstrijden worden bepaald door de gemaakte doelpunten in de wedstrijd. Als ik straks de (tussen)stand in de loop van de competitie ga bepalen dan wordt het geen tussenstand maar een eindstand waarbij elke wedstrijd die nog niet gespeeld is (lees waarvoor nog geen doelpunten in de db zijn gezet) op 0-0 eindigen en dat is natuurlijk niet de bedoeling. Ik moet dus in mijn query ook een bepaalde tijdsbepaling opnemen. In mijn wedstrijden tabel staat ook een datum en tijd van de wedstrijden. Ik moet dus in mijn query kunnen aangeven dat bij de tussenstand op moment X (datum en tijd) alleen de wedstrijden worden meegenomen die voor dat moment X gespeeld zijn.

Moet ik dit doen middels een WHERE statement? En zo ja hoe?

Ik heb nu de volgende query gedraaid

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT tbl_wedstrijden.wedstrijdID, thuisclubID, uitclubID, doelpuntID, thuisclub_uitclub
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE datumwedstrijd < 2012-08-12


maar ik krijg nul resultaten, terwijl de 1e wedstrijd op 2012-08-10 was en de 2,3,4e wedstrijd op 2012-08-11 was. Ik zou dus de eerste vier wedstrijden in mijn resultaat verwachten.
(overigens is de kolom "datumwedstrijd" uit tabel wedstrijden als type= "DATE" ingericht)

Moet ik voor stap 1B (dus het totaal aantal doelpunten voor de uitclub en thuisclub in elke wedstrijd) het statement SUM gebruiken?
Gewijzigd op 08/08/2013 11:48:15 door Jo Immanuel
 
PHP hulp

PHP hulp

21/11/2024 19:16:54
 
Erwin H

Erwin H

07/08/2013 14:52:23
Quote Anchor link
Eerste probleem eerst, de datum. Inderdaad zou je op datum moeten gaan selecteren. En dan niet alleen kleiner dan, ook een groter dan (of BETWEEN) omdat je anders mogelijk nog wedstrijden uit een vorige competitie krijgt...
Je WHERE statement zou overigens wel gewoon moeten werken, ik zie niet waarom het niet goed gaat om eerlijk te zijn. Tenzij het is omdat je quotes om een datum moet zetten:
WHERE wedstrijddatum < '2012-08-12'
Gewijzigd op 07/08/2013 14:53:22 door Erwin H
 
Jo Immanuel

Jo Immanuel

07/08/2013 15:01:27
Quote Anchor link
Aha, je hebt helemaal gelijk. Dom van me: met quotes krijg ik wel de juiste uitkomsten. Dat had ik kunnen weten. Zal wel aan de onzekerheid liggen denk ik...

De query is nu als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT tbl_wedstrijden.wedstrijdID, thuisclubID, uitclubID, doelpuntID, thuisclub_uitclub
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE datumwedstrijd > '2012-08-09' AND datumwedstrijd < '2012-08-12'


En ik krijg alleen de eerste vier wedstrijden als resultaten, zoals ik had gehoopt.

PS: Over die begindatum: stel er is nog een seizoen of wedstrijden uit hetzelfde seizoen maar van een andere competitie... Wat is wijsheid wat betreft performance en onderhoudbaarheid etc.? Voor elk seizoen (of elke competitie) een aparte tabel wedstrijden maken of alles in 1 tabel gooien?
Gewijzigd op 08/08/2013 11:47:23 door Jo Immanuel
 
Erwin H

Erwin H

07/08/2013 15:07:10
Quote Anchor link
Ok, dat werkt.

Nee, ga geen tabellen maken per onderdeel (in dit geval competitie). Je wilt in principe nooit je tabel structuur aan moeten passen als je gewoon extra data wilt invoeren. In dit geval zou je nog een extra entiteit kunnen opnemen: competitie.
Dat is dus een tabel (competitieID, naam, land, afdeling, etc etc) en bij elke wedstrijd sla je de competitieID op. Dan kan je simpel in deze query ook op competitieID selecteren.
 
Jo Immanuel

Jo Immanuel

07/08/2013 15:39:32
Quote Anchor link
Ok. Ik dacht misschien performance wise. Ik heb namelijk inmiddels al best een behoorlijke tabel spelers aangemaakt met allerhande informatie en merk dat zodra ik in mysql op tabel spelers klik om een nieuwe speler toe te voegen de laadtijd al behoorlijk is toegenomen. Dus ik dacht misschien dat het handig was om tabellen niet al te groot te maken om zo de performance lekker snel te houden?

Ik loop trouwens bij stap 1B al tegen problemen aan. Ik moet namelijk volgens mij al met virtuele kolommen gaan werken, aangezien de entiteiten (zoals jij dat zo mooi noemt) "#doelpunnten thuisclub" en "#doelpunnten thuisclub" niet bestaan.

Zoiezo moet ik volgens mij de sql-functie COUNT gaan gebruiken. Ik moet dan voor elke wedstrijd kijken (counten) hoeveel regels er zijn met vulling "thuis" en hoeveel regels er zijn met vulling "uit".

Dan krijg je zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT COUNT('thuis')
FROM tbl_doelpunten
WHERE wedstrijdID = '1'


Het eerste probleem is dat ik bij deze query als resultaat "2" krijg, terwijl dit 1 moet zijn (de thuisclub heeft immers maar 1 doelpunt gemaakt in wedstrijd 1).

Het tweede probleem is dat dit voor 1 wedstrijd is, terwijl je deze berekening (voor zowel thuis als uitdoelpunten) voor elke wedstrijd moet doen. Geen idee hoe je dat handig voor elkaar krijgt.

Het derde probleem is dat ik totaal niet weet hoe ik deze query moet combineren met de query van 1A.

Het vierde probleem is dat je volgens mij dus met virtuele kolommen moet werken om bij de 'samengevoegde' tabel straks voor elke wedstrijd de kolommen #doelpunten thuisclub en #doelpunten uitclub te krijgen.
Gewijzigd op 08/08/2013 11:47:01 door Jo Immanuel
 
Jeroen Jansen

Jeroen Jansen

07/08/2013 15:47:05
Quote Anchor link
Jo,

je zult je resultaten van 1A ook nog moeten groeperen en vervolgens de COUNT uitvoeren.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT    tbl_wedstrijden.wedstrijdID,
          thuisclubID,
          uitclubID,
          thuisclub_uitclub,
          count(thuisclub_uitclub) as doelpunten
FROM      tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE     datumwedstrijd > '2012-08-09' AND datumwedstrijd < '2012-08-12'
GROUP BY  tbl_wedstrijden.wedstrijdID, thuisclubID, uitclubID, thuisclub_uitclub


om met thuis en uitdoelpunten te werken zul je de tbl_doelpunten twee keer moeten joinen (1x thuis en 1x uit.
Gewijzigd op 07/08/2013 15:49:39 door Jeroen Jansen
 
Erwin H

Erwin H

07/08/2013 15:48:33
Quote Anchor link
Maak je op dit moment over performance nog niet druk. Het kan zijn dat je daar aan het einde het een en ander aan moet, maar dat kan. Het kan zijn dat het helemaal geen probleem is.

Stap 1B dan
Probeer het eerste inderdaad even voor 1 wedstrijd te doen. Wil je het later voor alle wedstrijden, dan haal je die WHERE clause weg en voeg je een GROUP BY clause toe. Ben je al bijna klaar ;-)

Het splitsen van de uit en thuis doelpunten wordt inderdaad nu even een vraag wat het beste is. Je kan het in twee queries doen (die dan later als twee afzonderlijke joins in je grotere query komen), of we kunnen proberen het met 1 te doen. Doe je het in twee, dan is het simpel, voeg een WHERE clause toe waarop je ofwel op uit, ofwel op thuis selecteert.
Doe je het in 1 query, dan denk ik.... (maar weet het ook niet zeker zonder te testen) dat je gewoon kan groeperen op de uit en thuis kolom. Dan zou je dit krijgen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT thuisclub_uitclub, COUNT(*)
FROM tbl_wedstrijden
WHERE wedstrijdID = 1
GROUP BY thuisclub_uitclub


Wil je dan vervolgens het voor alle wedstrijden hebben dan wordt het dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT wedstrijdID, thuisclub_uitclub, COUNT(*)
FROM tbl_wedstrijden
GROUP BY wedstrijdID, thuisclub_uitclub


Toevoeging op 07/08/2013 15:55:01:

@Jeroen
Ik zou het eerlijk gezegd niet zo doen. Wat je nu doet is eerst de join maken en daarna groeperen. Dat betekent dat je eerst de dataset gaat vergroten, voor je het gaat verkleinen. Als je andersom doet (eerst in subqueries de doelpunten uitreken en groeperen per wedstrijd en dan de join maakt) verklein je direct je dataset. Zeker bij grotere queries en grotere tabellen kan dat aanzienlijk schelen in hoe snel een query uitgevoerd kan worden.
Gewijzigd op 07/08/2013 15:55:32 door Erwin H
 
Jo Immanuel

Jo Immanuel

07/08/2013 16:35:38
Quote Anchor link
Heel erg Bedankt.

Ik heb nu voor 1 wedstrijd de volgende sql-query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT tbl_wedstrijden.wedstrijdID, thuisclub_uitclub, COUNT( * )
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE tbl_doelpunten.wedstrijdID = '1'
GROUP BY thuisclub_uitclub

en die geeft het volgende resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
wedstrijdID     thuisclub_uitclub     COUNT( * )
00001     thuis     1
00001     uit     1

Voor alle wedstrijden (inclusief datumafbakening) heb ik nu de volgende sql-query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT tbl_wedstrijden.wedstrijdID, thuisclubID, uitclubID, thuisclub_uitclub, COUNT( * )
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE datumwedstrijd > '2012-08-09'
AND datumwedstrijd < '2012-08-12'
GROUP BY tbl_wedstrijden.wedstrijdID, thuisclub_uitclub

en die geeft als resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
wedstrijdID     thuisclubID     uitclubID     thuisclub_uitclub     COUNT( * )
00001     22     15     thuis     1
00001     22     15     uit     1
00002     16     2     thuis     3
00002     16     2     uit     2
00003     18     13     thuis     1
00003     18     13     uit     1
00004     14     21     NULL    1

Ziet er in principe goed uit, wat me alleen wel opvalt is het laatste regeltje van wedstrijd 00004. Daar zijn geen doelpunten ingevoerd. En dat kan, want een wedstrijd kan op 0-0 eindigen. ik zou dan als resultaat willen zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
00004   14      21      thuis    0
00004   14      21      uit      0

Blijkbaar heb ik daar iets niet goed gedaan bij de inrichting?


Voordat de wedstrijdpunten (en virtuele kolommen) moeten worden aangemaakt is de volgende stap denk ik middels een query het volgende resultaat te krijgen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
wedstrijdID     thuisclubID     uitclubID     #doelpunten thuisclub     #doelpunten uitclub

Dus voor elke wedstrijd(ID) 1 regel waarzowel de count van de thuis als van de uitploeg in zit? Of is dit niet nodig en kan gelijk begonnen worden met het maken van de virtuele kolommen voor de wedstrijdpunten?


Toevoeging op 07/08/2013 16:56:26:

PS Erwin

Doe ik dat nu ook? Eerst de join maken en dan groeperen? En als ik het andersom doe, komt mijn query er dan als volgt uit te zien?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT wedstrijdID, thuisclub_uitclub, COUNT( * )
FROM tbl_doelpunten
GROUP BY wedstrijdID, thuisclub_uitclub

En zaken als wie die uit en thuisclub zijn, en de datumafbakening doe je later? (moet dan wel later want de clubID's en datum staan niet in tabel doelpunten)

PS Jeroen

Wat is het verschil tussen de manier van counten die jij gebruikt "count(thuisclub_uitclub) as doelpunten" en "count ( * )"

En waarom moet ik nou precies 2 keer joinen?
Gewijzigd op 08/08/2013 11:49:26 door Jo Immanuel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/08/2013 18:04:16
Quote Anchor link
Je hoeft niet twee x te joinen, het kan ook zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
    w.wedstrijdID,
    w.thuisID,
    w.uitID,
    COUNT(IF(d.thuisclub_uitclub = 'thuis',1,NULL)) thuisscore,
    COUNT(IF(d.thuisclub_uitclub = 'uit',1,NULL)) uitscore
FROM tbl_wedstrijden w
LEFT JOIN tbl_doelpunten d ON w.wedstrijdID = d.wedstrijdID
WHERE w.datumwedstrijd BETWEEN '2012-08-09' AND '2012-08-12'
GROUP BY w.wedstrijdID, w.thuisID, w.uitID

Overigens zie ik geen voordeel om thuis/uit te gebruiken ipv clubID, dit is geen dubbele data (het is immers een ID), en je haalt daarmee de (directe) relatie tussen de clubs tabel en de doelpunten tabel weg.
Als je nu bijvoorbeeld de topscorers wilt weergeven moet je dit via de tabel wedstrijden doen.

@Erwin
Een FK is in dit geval niet mogelijk, die kan wel over meerdere kolommen, maar in dit geval zou dit op wedstrijdID-thuisID of wedstrijdID-uitID moeten zijn en dat gaat niet.
Gewijzigd op 07/08/2013 18:41:13 door Ger van Steenderen
 
Jo Immanuel

Jo Immanuel

08/08/2013 01:13:12
Quote Anchor link
Is de volgende query bruikbaar om mee verder te gaan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT tbl_wedstrijden.wedstrijdID, thuisclubID, uitclubID, thuisclub_uitclub, COUNT( * )
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE datumwedstrijd > '2012-08-09'
AND datumwedstrijd < '2012-08-12'
GROUP BY tbl_wedstrijden.wedstrijdID, thuisclub_uitclub

Deze query geeft de volgende resultaten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
wedstrijdID     thuisclubID     uitclubID     thuisclub_uitclub     COUNT( * )
00001     22     15     thuis     1
00001     22     15     uit     1
00002     16     2     thuis     3
00002     16     2     uit     2
00003     18     13     thuis     1
00003     18     13     uit     1
00004     14     21     NULL    1

Dat is volgens mij stap 1 (A+B).

Nu stap 2: het selecteren van 2 extra virtuele kolommen waarin de punten staan voor de uit en thuisclub (0,1 of 3).


Doel na stap 2 is denk ik dat ik na mijn query de volgende uitkomst krijg:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
wedstrijdID     thuisclubID     uitclubID     thuisclub_uitclub     COUNT( * )     !#punten!
00001     22     15     thuis     1   !1!
00001     22     15     uit     1   !1!
00002     16     2     thuis     3   !3!
00002     16     2     uit     2   !0!
00003     18     13     thuis     1   !1!
00003     18     13     uit     1   !1!
00004     14     21     thuis    0   !1!
00004     14     21     uit    0   !1!

Dan moet ik in de query denk ik zoiezo ergens iets aangeven zoals in Jeroen zn eerdere query:

CASE WHEN score.score_thuis > score.score_uit THEN 3 WHEN score.score_thuis < score.score_uit THEN 0 ELSE 1 END as punten

Alleen:

1.Ik gebruik in tegenstelling tot Jeroen geen score tabel. Daardoor kan ik niet verwijzen naar (de waardes van) een kolom van een bepaalde tabel. Dat zal dan ook wel de reden zijn dat ik twee extra virtuele kolommen moet selecteren. Ik heb alleen geen idee hoe ik dat moet doen.

2. Jeroen maakt volgens mij gebruik van een dubbele joint (voor zowel de uitclub en de thuisclub). Ik ga voor de enkele denk ik.

Kan iemand mij verder helpen?

PS: @Ger
Waarom zou je de topscorers mbv tabel wedstrijden moeten uitrekenen als je kiest voor "uitclub"/"thuisclub" ipv "clubID"? Ik zie niet in waarom je dat niet (vrij eenvoudig) uit tabel doelpunten kunt halen als je spelerID meegeeft bij het doelpunt en registreert wanneer iets een eigen doelpunt is. Mis ik iets?
Gewijzigd op 08/08/2013 11:51:35 door Jo Immanuel
 
Jeroen Jansen

Jeroen Jansen

08/08/2013 08:28:08
Quote Anchor link
Jo,

Quote:
Ziet er in principe goed uit, wat me alleen wel opvalt is het laatste regeltje van wedstrijd 00004. Daar zijn geen doelpunten ingevoerd. En dat kan, want een wedstrijd kan op 0-0 eindigen. ik zou dan als resultaat willen zien:

dit kun je verhelpen door de functie COALESCE. Door COALESCE(COUNT(*), 0) krijg je het aantal doelpunten en wanneer deze niet gevonden zijn krijg je 0 als resultaat.

Quote:
1.Ik gebruik in tegenstelling tot Jeroen geen score tabel. Daardoor kan ik niet verwijzen naar (de waardes van) een kolom van een bepaalde tabel. Dat zal dan ook wel de reden zijn dat ik twee extra virtuele kolommen moet selecteren. Ik heb alleen geen idee hoe ik dat moet doen.

Ik denk dat je het beste verder kunt gaan met de sql van Ger. Daarbij krijg je in 1 regel zowel de thuis als uitscore en kun je wel het CASE-statement gebruiken.
 
Jo Immanuel

Jo Immanuel

08/08/2013 09:01:27
Quote Anchor link
Goedemorgen Jeroen,

Coalesce(count(*), 0) geeft hetzelfde resultaat.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT tbl_wedstrijden.wedstrijdID, thuisclubID, uitclubID, thuisclub_uitclub, COALESCE( COUNT( * ) , 0 )
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE datumwedstrijd > '2012-08-09'
AND datumwedstrijd < '2012-08-12'
GROUP BY tbl_wedstrijden.wedstrijdID, thuisclub_uitclub

Namelijk voor wedstrijd 00004 1 regel (00004 14 21 NULL 1). Ik zou graag twee regels willen, voor zowel thuis als uit (beide met waarde '0' bij count). Alleen als er niet gescoord is komt zowel de waarde "thuis" als "uit" niet voor in de doelpuntentabel bij kolom "thuisclub_uitclub". Dus kan hij hem ook nooit 2x tellen lijkt me. Hij telt hem denk ik 1 keer omdat wanneer er niet gescoord is er maar 1 regel is in de wedstrijden tabel en dus kan hij ook maar 1 keer geteld worden. Zelfde denk ik dat zal gebeuren wanneer er maar 1 keer gescoord is in een wedstrijd (uitslag is 1-0 of 0-1). Dan is in de join van de tabellen wedstrijden en doelpunten ook maar 1 regel te tellen en zal er als resultaat maar 1 regel (voor de club die gescoord heeft) teruggegeven worden.
Maar misschien is het ook helemaal niet belangrijk om 2 regels (1 voor thuis en 1 voor uit) te krijgen. Het is immers een tussenstap?

Ik ga nu nog even proberen om te kijken of ik verder kom met de reactie van Ger. ALhoewel ik gisteren alleen maar errors kreeg toen ik die probeerde te gebruiken.

Toevoeging op 08/08/2013 09:21:44:

Ok, interessant. Ik heb nu de query van Ger (iets aangepast) gebruikt en krijg nu geen errors meer, en de thuis en uitscore in 1 regel bij de resultaten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT tbl_wedstrijden.wedstrijdID, thuisclubID, uitclubID, COUNT( IF( thuisclub_uitclub = 'thuis', 1, NULL ) ) thuisscore, COUNT( IF( thuisclub_uitclub = 'uit', 1, NULL ) ) uitscore
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE datumwedstrijd > '2012-08-09'
AND datumwedstrijd < '2012-08-12'
GROUP BY tbl_wedstrijden.wedstrijdID

Geeft als resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
wedstrijdID     thuisclubID     uitclubID     thuisscore     uitscore
00001     22     15     1     1
00002     16     2     3     2
00003     18     13     1     1
00004     14     21     0     0

Precies wat ik hebben wil volgens mij. Bovendien ben ik nu van het probleem bij wedstrijden waar niet of maar 1x gescoord is af. Super dus!

Nu is de volgende stap (stap 2) dus om de punten af te leiden uit de thuisscore en de uitscore met behulp van het CASE-statement.
Gewijzigd op 08/08/2013 11:51:02 door Jo Immanuel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/08/2013 09:31:42
Quote Anchor link
Ik weet niet wanneer je het uitgeprobeerd hebt, maar ik heb daar later nog wat foutjes uitgehaald.
En je moet ook even de kolombenoemingen nalopen.
De query zou dan moeten opleveren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
wedstrijdID, thuisclubID, uitclubID, thuisscore, uitscore
0001            22           15         1           1
0002            16           2          3           0
0003            18           13         1           1
0004            14           21         0           0



Toevoeging op 08/08/2013 09:35:52:

Ik had je toevoeging gemist ;-)
 
Jo Immanuel

Jo Immanuel

08/08/2013 09:40:55
Quote Anchor link
Goedemorgen Ger,

Ik had het net al in mijn eigen reactie aangepast (thuisclub_uitclub bij select weggehaald) en krijg nu inderdaad hetzelfde als jouw resultaat. Ben ik heel tevreden mee.

Even een vraagje (aangezien ik weinig over het selecteren van virtuele kolommen kan vinden op internet): zijn de kolommen "thuisscore" en "uitscore" van het resultaat hierboven nu de virtuele kolommen die geselecteerd moeten worden om de punten (0,1 of 3) toe te kennen?

Doel is denk ik dat ik uiteindelijk nog weer twee extra kolommen in het resultaat vanmijn query moet krijgen, als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
wedstrijdID thuisclubID uitclubID thuisscore uitscore thuispunten uitpunten
00001 22 15 1 1 1 1
00002 16 2 3 2 3 0
00003 18 13 1 1 1 1
00004 14 21 0 0 1 1


Zoiets als dit werkt niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT    tbl_wedstrijden.wedstrijdID,
          thuisclubID,
          uitclubID,
          COUNT( IF( thuisclub_uitclub = 'thuis', 1, NULL ) ) thuisscore,
          COUNT( IF( thuisclub_uitclub = 'uit', 1, NULL ) ) uitscore,
          CASE WHEN thuisscore > uitscore THEN 3 WHEN thuisscore < uitscore THEN 0 ELSE 1 END as thuispunten,
          CASE WHEN thuisscore < uitscore THEN 3 WHEN thuisscore > uitscore THEN 0 ELSE 1 END as uitpunten
FROM      tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE     datumwedstrijd > '2012-08-09'
AND       datumwedstrijd < '2012-08-12'
GROUP BY  tbl_wedstrijden.wedstrijdID


Want dan krijg ik volgende error "#1054 - Unknown column 'thuisscore' in 'field list'".

Ik heb net dus twee virtuele(?) kolommen gemaakt ("thuisscore" en "uitscore") en (de waardes van) die twee virtuele kolommen die moet ik gebruiken om weer 2 nieuwe virtuele kolommen te maken ("thuispunten" en "uitpunten").

Hoe pak ik dat aan/Hoe verwijs ik naar de kolommen thuisscore en uitscore?

PS: hoe plak ik codes en resultaten wat netter (zoals jullie doen) in mijn posts hier op het phphulp.nl forum?
Gewijzigd op 08/08/2013 11:50:22 door Jo Immanuel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/08/2013 11:09:25
Quote Anchor link
Zet het tussen [code] en [/code] tags.

Het is beter om dat in de bovenliggende query te doen. Je kan namelijk de waarde van een virtuele kolom niet gebruiken in dezelfde select, je moet elke keer dat je die waarde nodig hebt hem opnieuw bepalen.

Het makkelijkste is om dat stukje query als subquery in te bouwen in de query van Jeroen
Gewijzigd op 08/08/2013 11:10:05 door Ger van Steenderen
 
Jo Immanuel

Jo Immanuel

08/08/2013 11:40:55
Quote Anchor link
OK, met subquery bedoel je middels een select van een select?

Bouw ik de query dan als volgt op?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT tbl_wedstrijden.wedstrijdID,
thuisclubID,
uitclubID,
COUNT( IF( thuisclub_uitclub = 'thuis', 1, NULL ) ) thuisscore,
COUNT( IF( thuisclub_uitclub = 'uit', 1, NULL ) ) uitscore,
FROM tbl_wedstrijden
LEFT JOIN tbl_doelpunten ON tbl_wedstrijden.wedstrijdID = tbl_doelpunten.wedstrijdID
WHERE datumwedstrijd > '2012-08-09'
AND datumwedstrijd < '2012-08-12'
GROUP BY tbl_wedstrijden.wedstrijdID


En waar moet ik dan precies onderstaande als subquery inbouwen? na WHERE en voor GROUP BY?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
CASE WHEN thuisscore > uitscore THEN 3 WHEN thuisscore < uitscore THEN 0 ELSE 1 END as thuispunten,
CASE WHEN thuisscore < uitscore THEN 3 WHEN thuisscore > uitscore THEN 0 ELSE 1 END as uitpunten


Ik heb nog nooit een subquery gebruikt/gemaakt volgens mij.

Toevoeging op 09/08/2013 09:55:54:

Beste forumleden,

Ik ben er nog niet uit.

De reactie van Ger heeft me aan het twijfelen gebracht. Heb ik al het voorgaande nu voor niets gedaan en blijkt nu dat het toch niet op de manier kan waarmee ik begonnen was (alles in 1 query met gebruik van tabel doelpunten en zonder tabel score)?

Of kan het toch en kan iemand me op weg helpen met het bouwen van een subquery om van de thuisscore en uitscore (stap 1 en 2) de resulterende wedstrijdpunten voor de thuis en uitploeg (stap 3) te berekenen?
Gewijzigd op 08/08/2013 11:49:52 door Jo Immanuel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

09/08/2013 10:21:30
Quote Anchor link
In principe kan je de query van Jeroen overnemen (met natuurlijk wat aanpassingen aan de veldnamen) en dan dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
...
FROM score INNER JOIN ....

door:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
....
FROM (
    SELECT tbl_wedstrijden.wedstrijdID,
    /* en de rest van de query)
     ) thuis

Overigens is dat wel de makkelijkste manier, maar niet de snelste (qua prestatie).
Ik heb een soort gelijke opzet qua tabellen als Jeroen, alleen is het tellen van de punten wat eenvoudiger en daar een query zonder subqueries voor gemaakt:
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
SELECT
    t.team_id,
    t.team_name,
    SUM(IF(t.team_id = m.home_id, r.home_score, 0)) points_home,
    SUM(IF(t.team_id = m.away_id, r.away_score, 0)) points_away,
    COALESCE(SUM(IF(t.team_id = m.home_id, r.away_score, r.home_score)), 0) points_against,
    COALESCE(SUM(IF(t.team_id = m.home_id, r.home_score, r.away_score)), 0) points_total,
    COUNT(IF(t.team_id = m.home_id, 1, NULL)) played_home,
    COUNT(IF(t.team_id = m.away_id, 1, NULL)) played_away,
    COUNT(m.home_id) played_total    
FROM
    regio_teams t
JOIN
    (regio_match_shedule m
    JOIN
        regio_match_results r
        ON m.match_id = r.match_id
    )
    ON (t.team_id = m.home_id OR t.team_id = m.away_id)
GROUP BY t.team_id, t.team_name
ORDER BY points_total, played_total, point_against

Een explain op deze query geeft 3 records met onder rows resp 21, 111, 1
Omgebouwd naar de query van Jeroen geeft de explain 7 records 21, 222, 111, 1, 111, 1, NULL
De laatse NULL is van het Union resultaat en doet er niet toe.
Het totaal aantal rijen is het product van al die row records, maw op het eind van de competitie;
21 x 420 = 8.820 of 21 x 840 x 420 x 420 = 3.111.696.000!!!!
En daar zit het effect van de subquery voor de doelpunten niet bij, want dat gaat in de 16 cijfers lopen.

Dus zal ik vanavond bovenstaande query eens verder uitwerken op deze situatie.
Gewijzigd op 09/08/2013 10:22:22 door Ger van Steenderen
 
Jo Immanuel

Jo Immanuel

09/08/2013 10:40:42
Quote Anchor link
Bedankt voor je reactie Ger,

Ik ga vandaag eerst maar eens proberen om de query van Jeroen aan te passen naar mijn situatie. Al is het maar voor oefening.

Maar als ik je goed begrijp gaat die uiteindelijke query heel langzaam zijn en wil je vanavond even kijken of dat op mijn manier (dus via tabel doelpunten) sneller kan?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

09/08/2013 12:43:32
Quote Anchor link
Nee, via tabel doelpunten is alleen maar langzamer want dat is een extra tabel, dus een extra factor en dat is in de query van Jeroen twee maal 1200 x 1200 x 3miljard en komt ongeveer op 4,5 biljard (ben ik even uitgegaan van gem 3 doelpunten per wedstrijd).

Dus dan gaat zo'n query een x aantal seconden duren, en dat wil je niet.
Maar dit kan sterk gereduceerd worden door de query uit mijn vorige reactie aan te passen naar jouw situatie (dus wel met de doelpunten tabel)
 
Jo Immanuel

Jo Immanuel

09/08/2013 12:59:44
Quote Anchor link
Ok, dat zijn flinke getallen. En het is inderdaad wel belangrijk dat deze query niet te langzaam gaat zijn, aangezien ik de stand vaak wil laten zien op mijn site.

Het zou fantastisch zijn als je me er vanavond een beetje mee kon helpen. Want het lukt me al niet om de 'eenvoudige' manier (dus de query van jeroen aan te passen aan mijn situatie) zonder errors te draaien. Volgens mij is het berekenen van een stand ook geen beginnerstuff, want met de tutorials die ik gelezen heb kom ik er niet uit. En ook in de de boeken die ik heb houden ze het bij redelijk simpele sql-queries. Hier moet je alles combineren. Dat is andere koek...
Gewijzigd op 09/08/2013 13:00:38 door Jo Immanuel
 

Pagina: « vorige 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.