Aantal spelers uit tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Gifo

Gifo

12/08/2007 15:18:00
Quote Anchor link
Hoi

Ik zit met de volgende uitdaging.
Ik heb een database met onder andere 2 tabellen: teams en rondeteams. Elke week worden de teams uit de tabel teams weggeschreven naar rondeteams.

Elk team bestaat uit 12 spelers.

In de tabel rondeteams staan dus per week de spelernamen van elk team vermeld. Wat ik nu graag wil is een overzicht maken van welke namen in de afgelopen weken allemaal zijn geselecteerd. Dit komt dus uit de tabel rondeteams.

Om de gegevens te selecteren, heb ik de volgende query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$sql
= "SELECT speler1,speler2,speler3,speler4,speler5,speler6,speler7,speler8,speler9,speler10,speler11,speler12";
$sql .= "FROM rondeteams";
$sql .= "WHERE teamnaam='Testteam'";
?>


Uit bovenstaande gegevens wil ik dan dat van elke speler het aantal weergegeven wordt. Ik dacht zelf dit te doen met array_count_values().

Ik krijg het resultaat uit bovenstaande query echter niet in één array.

Kan iemand mij misschien verder op weg helpen?
 
PHP hulp

PHP hulp

05/12/2020 16:30:34
 
Joren de Wit

Joren de Wit

12/08/2007 15:28:00
Quote Anchor link
Dit lijkt er heel sterk op dat je datamodel niet klopt! Als gevolg daarvan wordt het ook een stuk lastiger om de gegevens die jij wilt ophalen te verkrijgen.

In principe sla je gegevens maar 1x op in een database, dus elke spelernaam komt maar 1x voor. Maar het lijkt mij dat in de tabel rondeteams heel veel dubbele namen voorkomen. Dit zou je op een hele andere manier op moeten lossen. Als je dat doet, wordt het ook veel eenvoudiger om dat aantal dat je zoek te bepalen. Daarnaast weet je zodra je kolomnamen gaat nummeren ook al zeker dat je datamodel niet helemaal klopt. In een goed datamodel is dit namelijk niet nodig.

In een goed datamodel heb je allereerst natuurlijk een tabel met spelers nodig. Hierin sla je alle persoonlijke gegevens van de spelers op. Vervolgens zul je ook nog tabellen nodig hebben waarin je teams en rondes kunt opslaan. En waarschijnlijk zul je ook een aantal koppeltabellen nodig hebben om het geheel aan elkaar te koppelen.

Als ik jou was zou ik beginnen met het doorlezen van wat tutorials over normaliseren. Dit kan je in een later stadium namelijk grotere problemen besparen.
 
Frank -

Frank -

12/08/2007 15:42:00
Quote Anchor link
Blanche probeert het voorzichtig te brengen, dat is niet mijn sterkste kant: Jouw database deugt van geen kanten en kan bij het grofvuil worden gezet. Het is (vrijwel) onmogelijk om hier een goed systeem mee te maken.

Kortom, weggooien die zooi en opnieuw beginnen. Begin eens met deze tutorial uit te werken en het normaliseren onder de knie te krijgen.

Mocht je MySQL als database gebruiken, ik raad het je af, gebruik dan in hemelsnaam wel de innoDB-engine, dat is de enige mogelijkheid om een echte database (RDBM) in MySQL op te zetten.
 
Gifo

Gifo

12/08/2007 16:18:00
Quote Anchor link
Het was lang geleden dat ik op deze site een vraag had gesteld.

Inmiddels weet ik weer waarom.

Vaarwel.....
 
Frank -

Frank -

12/08/2007 16:24:00
Quote Anchor link
Gifo schreef op 12.08.2007 16:18:
Het was lang geleden dat ik op deze site een vraag had gesteld.

Inmiddels weet ik weer waarom.

Vaarwel.....
Dat is jammer, men helpt je hier graag en zeker met goede oplossingen.

Aanmodderen met jouw huidige database is zonde van de tijd. Nu een goede database opzetten en daarmee aan de slag gaan, levert veel meer op.

En daar komt bij, wat is er mis met iets nieuws leren?

Edit: Jammer dat in jouw topic van 03.03.2006 13:09 niet is gezegd dat het datamodel niet deugt, nu ben je bijna anderhalf jaar verder en zit je nog steeds met deze ellende. En dat was helemaal niet nodig geweest.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Gifo

Gifo

12/08/2007 17:18:00
Quote Anchor link
Ik was eigenlijk niet meer van plan te reageren.
Toch nog even kort een reactie.

Het gaat mij niet om dat ik niet open sta voor iets nieuws.
Maar ik stel een volgens mij toch normale vraag waar ik tegenaan loop, waarbij ik hoop dat er iemand is die mij kan helpen.

Vervolgens krijg ik alleen (erg makkelijke) kritiek op het datamodel.
Jullie hebben bij lange na niet alle informatie over het datamodel, dus om dit gelijk helemaal af te kraken vind ik erg flauw. Ik heb hier wel goed over nagedacht aan het begin en tot nu toe helemaal geen problemen mee gehad.
Nu wil ik er echter iets extra's mee doen en kom ik er niet uit hoe dat te doen.

Als blijkt dat ik hiervoor mijn datamodel moet aanpassen, dan ga ik hier zeker naar kijken.

Ik vind het gewoon jammer dat er meteen (met losse flodders) geschoten wordt voordat er verder gevraagd wordt. En om maar te zwijgen over een mogelijk antwoord op mijn vraag.
 
Joren de Wit

Joren de Wit

12/08/2007 17:25:00
Quote Anchor link
Zoals ik al zei, het aanpassen van je datamodel is zeker de meest slimme oplossing...

Het zal ongetwijfeld ook met een andere PHP manier opgelost kunnen worden, maar dat zou ik niet aanraden. Je loopt nu tegen dit, misschien relatief makkelijk op te lossen, probleem aan. Maar zeker is dat je met dit datamodel in de toekomst tegen veel grotere problemen aan kunt/zal lopen!

Verder snap ik je vraag ook nog niet helemaal, je wilt van elke speler een aantal. Maar welk aantal bedoel je dan?
 
Gifo

Gifo

12/08/2007 17:30:00
Quote Anchor link
@Blanche

Ik wil graag een overzicht van het aantal keer dat eenzelfde speler is gekozen door een bepaalde deelnemer in de verschillende rondes.
 
Tommy Masschelein

Tommy Masschelein

12/08/2007 17:34:00
Quote Anchor link
Gekozen ?
Je uitleg laat blijken dat iedere team automatisch in de tabelrondeteam gestopt wordt..
of heb ik dat verkeerd op ?
 
Frank -

Frank -

12/08/2007 17:37:00
Quote Anchor link
Gifo, er wordt niet met losse flodders geschoten, er wordt je gewoon vertelt hoe de vlag er bij hangt. Een tabel met genummerde kolomnamen is 999999 van de 1000000 keer een verkeerd opgezet. En die ene keer dat het wel goed is, moet ik nog tegenkomen. Je kunt het flauw vinden dat we jouw datamodel afkraken, ik vind het nog veel flauwer om iemand aan te laten klooien met een datamodel wat nog veel meer problemen gaat opleveren. Met het huidige datamodel kun je namelijk geen goede (lees: eenvoudige) queries maken.

Dit heeft tot gevolg dat jij allerlei zaken die standaard in een database zitten, zelf nog eens kunt gaan nabouwen in PHP. Dit kost veel tijd om te bouwen, te testen en te debuggen en het uiteindelijke resultaat is een script dat ook nog eens een stuk langzamer is! Zit jij hierop te wachten? Ik zou er niet vrolijk van worden.

Het datamodel is gewoon niet goed, hierdoor wordt de boel onnodig ingewikkeld. Ik kan je dus niets anders aanraden dan een goed datamodel op te zetten en jouw scripts daarop aan te passen.
Quote:
Wat ik nu graag wil is een overzicht maken van welke namen in de afgelopen weken allemaal zijn geselecteerd.

Dit zal uit minimaal 2 tabellen moeten komen, de tabel 'spelers' en de tabel 'opstelling'. Tevens zal er in de tabel 'opstelling' een datumtijd-stempel moeten staan waarmee je eenvoudig het weeknummer kunt bepalen.

Voorbeeldje om de spelers van vorige week op te halen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT
  naam
FROM
  spelers AS s
    JOIN opstelling AS o ON s.id = o.id_speler
WHERE
  WEEK(o.datum) = WEEK(NOW()) - 1
AND
  YEAR(o.datum) = 2007

Maar goed, dit zul je moeten aanpassen aan het datamodel zoals jij dat opzet. Het idee van een tabel 'spelers' en 'opstelling' zal waarschijnlijk niet zo anders zijn.

Succes!
 
Joren de Wit

Joren de Wit

12/08/2007 17:40:00
Quote Anchor link
Met andere woorden, hoe vaak een bepaalde speler in 1 team voorkomt?

Tja, met deze opzet wordt dat toch echt lastig. Je zou de gegevens die je met die query ophaalt in een array kunnen zetten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// $result = mysql_query(...)
$gegevens = array();
while($row = mysql_fetch_assoc($result))
{

    $gegevens[] = $row;
}

?>

Vervolgens zou je met een tweetal foreach loops de gegevens uit kunnen lezen en kunnen kijken hoe vaak 1 speler voorkomt. Het grote probleem hier is dat je die loop voor elke speler uit moet gaan voeren. Maar ja, hoe krijg je die lijst met spelers die je moet doorlopen?

Het zal er waarschijnlijk op neer komen dat je een complexe (recursieve) php functie moet gaan schrijven die de resultaten uit de database voor je interpreteert. Ik zou er persoonlijk niet aan beginnen.
 
Gifo

Gifo

12/08/2007 21:43:00
Quote Anchor link
Heb inmiddels de volgende (vrij eenvoudige) oplossing bedacht gebruik maken van de functie array_unshift():

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
<?php
$sql
= "SELECT speler1,speler2,speler3,speler4,speler5,speler6,speler7,speler8,speler9,speler10,speler11,speler12";
$sql .= "FROM rondeteams";
$sql .= "WHERE teamnaam='Testteam'";

$resultaat = mysql_query($sql);

$aantal_spelers = array();

while($row = mysql_fetch_array($resultaat))
{


array_unshift($aantal_spelers,
                $row['speler1'],
                $row['speler2'],
                $row['speler3'],
                $row['speler4'],
                $row['speler5'],
                $row['speler6'],
                $row['speler7'],
                $row['speler8'],
                $row['speler9'],
                $row['speler10'],
                $row['speler11'],
                $row['speler12']);

}


$tel_aantal = array_count_values($aantal_spelers);
?>
 
Joren de Wit

Joren de Wit

12/08/2007 21:53:00
Quote Anchor link
Tja, dit zal tot op zeker hoogte werken. Maar wat nu als je 2 spelers met dezelfde naam hebt? Het kan best zo zijn de naam Jan twee keer voorkomt, alleen wordt hij op jouw manier niet apart geteld.

En hoe behandel je de verschillende versies van dezelfde naam: Jan, jan, JAN? Een spatie die per ongeluk in een naam staan zal ook een probleem opleveren, want 'Jan' is immers niet hetzelfde als ' Jan'.

Kortom, je zult of al die uitzonderingen af moeten vangen in je PHP script, of je zult je datamodel aan moeten gaan passen. Iets dat naar mijn mening nog steeds slimmer is...
 
Gifo

Gifo

12/08/2007 22:00:00
Quote Anchor link
Deze problemen zullen zich niet voordoen.
De teams zijn namelijk gevormd vanuit een tabel 'spelers'. Elke naam is derhalve per definite uniek.

Eventuele uitzonderingen zjn al afgevangen bij het aanmaken van de teams zelf.
 
Jan Koehoorn

Jan Koehoorn

12/08/2007 23:40:00
Quote Anchor link
Eigenlijk zouden we twee nieuwe websites moeten maken, naast phphulp:

1) www.geefmesneleenoplossingdiewerktmaaktnietuithoe.nl
2) www.ikwilechtgoedlerenprogrammeren.nl

;-)
 
Wouter K

Wouter K

12/08/2007 23:44:00
Quote Anchor link
Idd Jan
Jan jij weet nog hoe ik ben begonnen met Niets en dat ik door simpele vraagjes nu toch men site op poten heb gekregen hé ?

Ik heb er veel van geleerd :)

Neem er dus een voorbeeld aan
 
Gifo

Gifo

12/08/2007 23:52:00
Quote Anchor link
Sorry maar dit vind ik echt onzin.

Er wordt hier een vraag gesteld. En gelijk wordt er met woorden gegooid als "deugt van geen kant", "zet maar bij het grofvuil", "aanklooien".
En dit terwijl er niet eens wordt gevraagd waarom voor een bepaalde opzet is gekozen.

Er staat veel nuttige info op deze site, maar als er op een dergelijke manier gereageerd wordt, gaan bij mij de nekharen overeind staan.

Ik zeg niet dat ik het allemaal op de beste en enig goede manier doe, maar er zijn nog altijd meerdere wegen die naar Rome leiden......
 
Jan Koehoorn

Jan Koehoorn

12/08/2007 23:57:00
Quote Anchor link
Absoluut. En het staat je vrij om elke weg te kiezen. En als je onderweg het even niet meer weet, kun je ook de weg vragen. En ook dat advies mag je aan je laars lappen. We leven tenslotte in een vrij land.
 
Gifo

Gifo

13/08/2007 00:02:00
Quote Anchor link
Tuurlijk, helemaal mee eens.

Maar begrijp je wat ik zeg over de manier waarop iets gebracht wordt?
Ik bedoel, als ik iets beter anders kan doen hoor ik het graag. Kritiek is nooit leuk, maar wel nuttig.

Maar je kan ook proberen op een normale manier te reageren.
Hoe er op mijn vraag gereageerd werd, vind ik niet normaal.
 
Jan Koehoorn

Jan Koehoorn

13/08/2007 00:05:00
Quote Anchor link
Ja, je punt is duidelijk. Frank is wat kort door de bocht soms. Blance formuleert wat voorzichtiger.

Maar wat mij interesseert: ben je nu op nieuwe ideeën gebracht? Denk je bij jezelf: ik moet toch eens wat over normalisatie gaan lezen? Of ben je blij met elke oplossing, als het maar werkt?
 
Gifo

Gifo

13/08/2007 00:12:00
Quote Anchor link
Allebei eigenlijk:

1) ik ben blij dat ik inmiddels een oplossing gevonden heb voor waar ik mee bezig ben.

2) Ik heb vanavond idd al het e.e.a. gelezen over normalisatie en ik ga bekijken of ik dit verder kan en ga toepassen in mijn huidige site.
 

Pagina: 1 2 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.