[PHP/SQL] Array in select option

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Hallo, ik ben bezig met het maken van een CMS waar leagues in komen te staan.
Nu ben ik bezig met de pagina waarop de gebruikers zich kunnen gaan inschrijven.
Op deze pagina moet de gebruiker ook gaan kiezen in welke auto die gaat rijden.
Welke auto toegestaan is voor deze league is in het admin deel bepaald en deze auto die dus alleen beschikbaar zijn voor die league zijn doormiddel van de implode functie van php in één cel in het SQL database gezet.

Nu gebruik ik de onderstaande code.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
$sql2 = mysql_query("SELECT autos FROM leagues WHERE leaguenaam='$leaguenaam'");
    while($result = mysql_fetch_array($sql2)){
    
    $autos = $result["autos"];
    $pieces = explode(",", $autos);
                
    echo $pieces[0]; //TEST
    echo $pieces[1]; //TEST
    echo $pieces[2]; //TEST
    var_dump($pieces);
            
    echo'<select name="wagen" id="wagen">';
    if(in_array($pieces[1],$pieces,true)){
        echo'<option value="'.$pieces[1].'">'.$pieces[1].'</option>';}
    else{
        echo '<option value="'.$pieces[1].'">'.$pieces[1].'</option>';}
    }
    echo '</select>';
?>

De SQL query die werkt prima dus daar zit het probleem niet in. Zodra de SQL query gedaan is haalt die dus de beschikbare autos op in de cel autos in de tabel leagues.
In die cel staat bijvoorbeeld de waardes: F430,F550,DBR9
Dus tussen elke type auto staat een komma, doormiddel van de explode functie splits ik deze autos door te kijken waar de komma staat, en uit eindelijk zet die alles in een array, wat ik dus ook test.

Nu wil ik een dropdown hebben waarin vervolgens deze autos komen te staan die in de array staan, alleen krijg ik dit dus niet voor elkaar.
Jullie zien nu in het option, select deel $pieces[1] staan, dus nu laat die in het dropdown menu de waarde zien op de plaats [1] in het array.

Ik heb ook dit geprobeerd
PHP:
1
2
3
4
5
6
7
8
9
   echo'<select name="wagen" id="wagen">';
   if(in_array($pieces['wagen'],$pieces,true))
   {
    echo'<option value="'.$pieces['wagen'].'">'.$pieces['wagen'].'</option>';
   } else {
    echo '<option  value="'.$pieces['wagen'].'">'.$pieces['wagen'].'</option>';
   }
}
echo '</select>';

Maar dit deed helemaal niks, dus iemand die mij hiermee kan helpen zodat ik dit eindelijk werkend kan krijgen.

Acties:
  • 0 Henk 'm!

Verwijderd

Aan je code te zien heb je comma seperated values in je tabel staan? Ga eerst de data eens normaliseren ;)

[ Voor 21% gewijzigd door Verwijderd op 29-04-2009 13:22 ]


Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
for loop of foreach loop gebruiken om door je array heen te gaan?

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Verwijderd schreef op woensdag 29 april 2009 @ 13:21:
Aan je code te zien heb je comma seperated values in je tabel staan? Ga eerst de data eens normaliseren ;)
In mijn database staat er tussen elke auto een komma.
En door die explode functie haal ik de komma eruit en zo komt elke auto er appart uit.

Acties:
  • 0 Henk 'm!

  • GrooV
  • Registratie: September 2004
  • Laatst online: 13:52
Ik zou toch gewoon je database gaan normaliseren zodat je voor iedere auto een aparte record hebt, als je dan je relaties goed legt dan merk je ook bijna geen snelheidsverlies

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Als je, zoals Jesper aangeeft, je datamodel doet normaliseren, kun je meteen de info van alle auto's ophalen door een JOIN. Je hebt dan 3 tabellen nodig, eentje voor de leagues, eentje voor de auto's en eentje voor de koppeling tussen de leagues en de auto's.

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Dutch3men schreef op woensdag 29 april 2009 @ 13:24:
en zo komt elke auto er appart uit.
Blijkbaar niet, anders had je geen probleem ermee ;)

Acties:
  • 0 Henk 'm!

Verwijderd

RobertMe schreef op woensdag 29 april 2009 @ 13:31:
Als je, zoals Jesper aangeeft, je datamodel doet normaliseren, kun je meteen de info van alle auto's ophalen door een JOIN. Je hebt dan 3 tabellen nodig, eentje voor de leagues, eentje voor de auto's en eentje voor de koppeling tussen de leagues en de auto's.
Precies.

Als je het echt zo wilt doen als nu (en dat raad ik af), zal het volgende wel werken:

PHP:
1
2
3
4
5
6
7
8
$options = '';
if(is_array($pieces) && count($pieces) {
  foreach($pieces as $piece) {
    $options .= '<option value="'.$piece.'">'.$piece.'</option>';
  }
}

echo $options;


Ofzo. Niet getest. :)

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
The_Ghost16 schreef op woensdag 29 april 2009 @ 13:23:
for loop of foreach loop gebruiken om door je array heen te gaan?
Ik gebruik nu een foreach loop zodat de code er nu zo uit ziet voor het laatste stuk.
PHP:
1
2
3
4
5
6
7
8
9
10
echo'<select name="wagen" id="wagen">';
foreach ($pieces as $mijnwagen) {
    if(in_array($mijnwagen['wagen'],$mijnwagen,true)){  
        echo'<option value="'.$mijnwagen['wagen'].'">'.$mijnwagen['wagen'].'</option>';
    } else {
        echo '<option  value="'.$mijnwagen['wagen'].'">'.$mijnwagen['wagen'].'</option>';
        }
}
}   
echo '</select>';

Ik krijg nu 3 opties (er horen er ook maar 3 uit te komen) in het dropdown menu, maar hij laat gek genoeg alleen de eerste letter zien van de auto en niet de rest :?

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
$mijnwagen zal geen array zijn, vervolgens zullen er wat rare dingen gebeuren waardoor die $mijnwagen[0] doet of zo.

Trouwens zie ik ook 0,0 verschil tussen of hij nu wel of niet slaagd voor die if(in_array(..)) regel is toch precies hetzelfde.

Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
PHP:
1
2
3
4
for ($i = 0; $i < count($pieces);$i++)
{
    echo('<option value="'.$i.'">'.$pieces[$i].'</option>');
}


Zoiets zou al moeten werken

[ Voor 0% gewijzigd door The_Ghost16 op 29-04-2009 13:44 . Reden: quote vergeten ]


Acties:
  • 0 Henk 'm!

Verwijderd

Idd nogal een nutteloos statement :)

Acties:
  • 0 Henk 'm!

  • EnigmA-X
  • Registratie: Februari 2002
  • Laatst online: 05-09 11:01
The_Ghost16 schreef op woensdag 29 april 2009 @ 13:23:
for loop of foreach loop gebruiken om door je array heen te gaan?
...kijk eerst daar eens naar. Op php.net kan je alles vinden wat je nodig hebt.
http://nl.php.net/manual/en/control-structures.foreach.php

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Verwijderd schreef op woensdag 29 april 2009 @ 13:37:
[...]


Precies.

Als je het echt zo wilt doen als nu (en dat raad ik af), zal het volgende wel werken:

PHP:
1
2
3
4
5
6
7
8
$options = '';
if(is_array($pieces) && count($pieces) {
  foreach($pieces as $piece) {
    $options .= '<option value="'.$piece.'">'.$piece.'</option>';
  }
}

echo $options;


Ofzo. Niet getest. :)
Ik heb het nu werkend met jou code al vergat je een ) bij het if statement :p
Maar in ieder geval bedankt nu kan ik weer verder :)

Acties:
  • 0 Henk 'm!

  • EnigmA-X
  • Registratie: Februari 2002
  • Laatst online: 05-09 11:01
The_Ghost16 schreef op woensdag 29 april 2009 @ 13:43:
PHP:
1
2
3
4
for ($i = 0; $i < count($pieces);$i++)
{
    echo('<option value="'.$i.'">'.$pieces[$i].'</option>');
}


Zoiets zou al moeten werken
Het zou kunnen werken, maar je gaat er blind vanuit dat de aangeleverde array nummeriek gezien on-onderbroken oplopend is en geidentificeerd wordt met een getal. Dat zijn een heleboel aannames, die je met een foreach in 1x buitenspel zet :)

Acties:
  • 0 Henk 'm!

Verwijderd

Dutch3men schreef op woensdag 29 april 2009 @ 13:47:
[...]

Ik heb het nu werkend met jou code al vergat je een ) bij het if statement :p
Maar in ieder geval bedankt nu kan ik weer verder :)
Fijn dat het werkt, ik had het even uit de losse hand getikt dus fouten voorbehouden ;). Toch zou ik even naar je data model kijken. Eigenlijk is het vrijwel nooit verantwoord om comma seperated values op te slaan. Ik adviseer je een tussentabel te maken. Post anders even je tabellen, dan kunnen we je misschien op weg helpen.

Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
EnigmA-X schreef op woensdag 29 april 2009 @ 13:47:
[...]


Het zou kunnen werken, maar je gaat er blind vanuit dat de aangeleverde array nummeriek gezien on-onderbroken oplopend is en geidentificeerd wordt met een getal. Dat zijn een heleboel aannames, die je met een foreach in 1x buitenspel zet :)
Dat is waar. Maar ik ben niet zo heel goed in php en weet niet hoe de foreach daarin werkt :P
Dus dacht laat ook ff zien hoe het ongeveer kan in een for loopje.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Verwijderd schreef op woensdag 29 april 2009 @ 13:48:
[...]


Fijn dat het werkt, ik had het even uit de losse hand getikt dus fouten voorbehouden ;). Toch zou ik even naar je data model kijken. Eigenlijk is het vrijwel nooit verantwoord om comma seperated values op te slaan. Ik adviseer je een tussentabel te maken. Post anders even je tabellen, dan kunnen we je misschien op weg helpen.
Ik heb samen met iemand anders een tijd geleden gebrainstormed etc over hoe de tabellen eruit zouden moeten zien en toen kwamen we hierop. Er zullen vast wat fouten inzitten :p
Op dit moment heb ik de tabellen Users, League, Circuits, Races en Autos werkend inclusief het admin deel wat hierbij hoort etc.
Ben nu dus bezig met de tabel Teams, waarin de gegevens komen te staan welke auto het team heeft, wie er in dit team zit, hun naam en dit team word gekoppeld aan een league.

Verder ben ik ook wel benieuwd waarom je het onverantwoord vind om met comma seperated values te werken.

Acties:
  • 0 Henk 'm!

Verwijderd

Normaliseren: Wikipedia: Databasenormalisatie, daar staat vast genoeg informatie waarom comma seperated values niet handig zijn :)

Zo te zien moet 1 team over meerdere auto's kunnen bezitten:

Tabel Teams
-------------------
TeamID


Tabel Team_Auto_Koppeling
-------------------
KoppelingID
AutoID
TeamID


Tabel Autos
-------------------
AutoID

[ Voor 30% gewijzigd door Verwijderd op 29-04-2009 14:18 ]


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Verder ben ik ook wel benieuwd waarom je het onverantwoord vind om met comma seperated values te werken.
Ik zoek de league waarin auto mercedes voorkomt, maak me daarvoor maar eens de query ;) en dan niet met LIKE, want dat is langzaam, en niet betrouwbaar (LIKE mercedes kan ook merecesa matche, komma erachter kan niet, want misschien is het wel de laatste)

Verder moet je ook nog een tabel maken tussen League en Auto's, waarin je het LeagueID plaatst en het AutoID, zo kun je goed zoeken, en de data goed ophalen.

Verder is het IMHO ook logischer dat teams meedoen aan een league, en een team heeft een of meerdere auto's.

En hoe kun je nu een UitslagID hebben, wat geen PK is, en een samengestelde PK over UserID, RaceID, TeamID, LeagueID en AutoID? Zet die PK op UitslagID, en gooi over de rest (user, race, team, league en auto) een grote UNIQUE index.

Volgensmij hoort er ook nog een punten tabel bij (punten_Q, Punten_R, Punten_S, Punten_B).

Oftewel het datamodel schort volgensmij nog vanalles aan. Lees dus eens iets over database normalisatie.

Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
Waarom zit in dit schema geen PK->FK relatie tussen leagues en autos? Dit is niet mogelijk namelijk met een comma sepertad value. En daarom is dus een koppel tabel nodig.

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Nog wat dingen die me zo opvallen:
Waarom sla je bij een Uitslag de Teamnaam op? Je houd toch al het TeamID bij, dat is voldoende, kun je de naam ophalen.
Zo te zien moet 1 team over meerdere auto's kunnen bezitten:
In het datamodel wat ie nu heeft kan dat nu toch niet :+ anders kon die FK niet op AutoID bij Team.
Tabel Team_Auto_Koppeling
-------------------
KoppelingID
KoppelingID is niet perse nodig, je kunt ook een samengestelde PK doen op AutoID en TeamID, werkt net zo makkelijk (het KoppelingID gebruik je, in ieder geval in in deze situatie, toch niet)

Acties:
  • 0 Henk 'm!

Verwijderd

"In het datamodel wat ie nu heeft kan dat nu toch niet :+"

Nee, dat begrijp ik, daarom geef ik een oplossing hoe het eventueel wel kan. De methode die die nu gebruikt is niet goed.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Verwijderd schreef op woensdag 29 april 2009 @ 14:16:
Normaliseren: Wikipedia: Databasenormalisatie, daar staat vast genoeg informatie waarom comma seperated values niet handig zijn :)

Zo te zien moet 1 team over meerdere auto's kunnen bezitten:

Tabel Teams
-------------------
TeamID


Tabel Team_Auto_Koppeling
-------------------
KoppelingID
AutoID
TeamID


Tabel Autos
-------------------
AutoID
Een team heeft 2 rijders die elke een eigen auto hebben, maar wel hetzelfde type. Elke auto moet dan een eigen startnummer krijgen en mocht dan diegene die in die auto rijd met dat startnummer in de punten rijden, moet diegene punten erbij kunnen krijgen.

Maar je hebt ook nog leagues waarin je als privateer rond rijd en je hebt nog een Endurance klasse waarin je met minimaal 2 tot maximaal 4 rijdens in één en dezelfde auto zit en dus bij diegene op locatie van rijder wisselt tijdens de stop. Mocht dan dat team in de punten komen krijgt dus dat hele teampunten op naam de teamnaam.

Ik blijf het lastig vinden om een goed werkend database structuur op te bouwen, niet iemand die een tooltje weet waarmee je dit soort dingen kan maken?

[ Voor 6% gewijzigd door FabiandJ op 29-04-2009 14:54 ]


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Ik blijf het lastig vinden om een goed werkend database structuur op te bouwen, niet iemand die een tooltje weet waarmee je dit soort dingen kan maken?
Er is geen tool die je aan de hand van data een datamodel kan maken, alleen maar tools die je helpen met het visualiseren, en als ik zo je diagram zag, zou ik zeggen dat je al Dezign for Database gebruikt, wat een van de betere ERD programma's schijnt te zijn.
Enige tip wat ik je kan geven is het leren van normaliseren. Kom je er dan nog niet uit/heb je dan nog vragen, ben ik, en ik denk ook anderen, altijd bereid om je te helpen. Mits je natuurlijk goed aangeeft wat je wil bereiken/wat je wil opslaan, en wat je al hebt geprobeerd/zelf in gedachten had, ik/we gaan natuurlijk niet voorkauwen.

Acties:
  • 0 Henk 'm!

  • GrooV
  • Registratie: September 2004
  • Laatst online: 13:52
Ik zou trouwens ook geen () gebruiken voor je Column namen, dit maakt het onnodig lastig namelijk.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Ik ben nu eens bezig in Access en dan maak ik de tabellen en die vul ik in.
Ik heb het tot nu toe to zo ver:

Even een klein verhaaltje hoe ik denk.

Een gebruiker maakt op een registreer pagina een account aan, deze gegevens komen in de tabel "Gebruikers" terecht.

De admin voegt auto's toe in de tabel "Autos" bijvoorbeeld:
-autonaam: F550
-klasse: CUP600
-spel: GTR2

Nu maakt de admin een league aan.
Hij selecteert het spel waarop het spel zal draaien als voorbeeld neem ik "GTR2".
Zodra dit gedaan is moet die auto's uitkiezen, ondertussen is na het klikken van het spel alle auto's die niet in het spel GTR2 zitten eruit gefilterd.
Nu kiest de admin welke auto's hij beschikbaar wilt stellen waaruit de gebruiker straks kan kiezen.
En hij vult de overige velden in als status kiest die Open, zodat de gebruikers een optie krijgen om zich in te schrijven.

Nu logt een gebruiker in op de site en ziet dat het mogelijk is om in te schrijven voor een league die de admin net heeft aangemaakt.
Hij klikt op de knop inschrijven en krijgt een pagina voor zich.
Hierop komen dan de velden te staan:
-Teamnaam
-Hoofdsponsor
-naam_rijder1 (deze is al ingevuld want hij haalt de naam op aan de hand van zijn sessie en SQL)
-naam_rijder2 (hier krijgt die een dropdown_menu waaruit die van de beschikbare rijders kan kiezen)
-startnummer_rijder1
-startnummer_rijder2
-teamauto (hier krijgt die een dropdown menu te zien en kan dan alleen kiezen uit de auto's die de admin beschikbaar gesteld heeft)
-auto_rijder1 (deze wordt automatisch ingevuld aan de hand van de keuzen bij teamauto)
-auto_rijder2 (zelfde als bij auto_rijder1)

En vervolgens ramt die op de knop Inschrijven en is die ingeschreven en deze gegevens komen in de tabel "Teams" te staan.

Nu heeft een league ook races, nou heb ik een tabel "Races" met daarin de datum etc erin, alleen heb ik geen idee hoe ik die nou op een goeie manier kan koppelen met de league.
En hoe kan ik het beste de uitslagen verwerken?

En zien jullie nog andere dingen die ik beter anders zou moeten doen.

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Teams:
naam_rijder1
naam_rijder2
startnummer1
startnummer2
auto1
auto2

2 dingen:
Dit behoord tot een coureur, in ieder geval naam en startnummer, en een coureur is een user, dus je kunt deze rechtstreeks koppelen aan Gebruikers, of je maakt een tabel Coureurs: coureurID, gebruikerID, startnummer, auto, en een Coureur koppel je aan een Team. Punt twee:
Geen herhalende kolommen in een tabel.
oftewel, naam_rijder1, naam_rijder2, je bent kolommen aan het nummeren, en dat moet je never nooit doen, oplossing: Coureur_Team: CoureurID, TeamID (samengestelde PK, en beide FK naar resp Coureurs.CoureurID en Teams.TeamID tabel)

Leagues.beschikbare_autos, daar moet nog steeds een koppeltabel komen ;) League_Autos (of gewoon Beschikbare_Autos): LeagueID, AutoID (weer samengestelde PK en beide FK naar resp Leagues.LeagueID en Auto.AutoID)
Nu heeft een league ook races, nou heb ik een tabel "Races" met daarin de datum etc erin, alleen heb ik geen idee hoe ik die nou op een goeie manier kan koppelen met de league.
Precies zoals je zegt :P Een race hoort bij een league, oftewel, Races.LeagueID (FK naar Leagues.LeagueID)
En hoe kan ik het beste de uitslagen verwerken?
Een coureur heeft een bepaald resultaat bij een race, oftewel, een tabel Resultaat met een RestultaatID, CoureurID, RaceID, en de rest van je data.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Oke ik heb jou commentaar er in verwerkt en het één en ander toegevoegd, klopt het zo beter?


En iets in mij zegt dat teamid er nog in moet bij de tabel "Leagues" of leagueid bij de tabel "Teams" maar dat weet ik niet zeker. Aangezien een team deel uit maakt van en league.

Alleen werkt het op deze manier nog wel als een gebruiker met meerdere leagues mee gaat doen?
Aangezien dat wel mogelijk zou kunnen zijn, de ene league is op een zondag en een andere op bijvoorbeeld een dinsdag.

[ Voor 5% gewijzigd door FabiandJ op 23-12-2016 11:56 ]


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Je hebt een relatie tussen Coureurs en Beschikbare_Autos, kun je me die uitleggen? :P Lijkt mij toch dat Coureurs naar Autos moet.
Je hebt een rechtstreekse relatie tussen Teams en Coureur, dit betekend dat een team maar een coureur kan hebben, hier moet dus een koppeltabel tussen, zoals ik al aangaf. (koppeltabel is beste, omdat je dan naderhand ook een team van 5 coureurs kan hebben zonder je datamodel aan te passen, en nummeren van kolomnamen hoort sowieso niet) Als je voor koppeltabel gaat zoals ik net al voorstelde (CoureurID, TeamID en voor de rest niks), moet je TeamID laten staan bij resultaat, als je in die koppeltabel ook een ID kolom maakt, kun je TeamID en CoureurID weghalen in resultaat, en moet je dus dat nieuwe id gebruiken
En iets in mij zegt dat teamid er nog in moet bij de tabel "Leagues" of leagueid bij de tabel "Teams" maar dat weet ik niet zeker. Aangezien een team deel uit maakt van en league.
Dan voeg je dat toe, en hoef ik niet te zeggen dat het ontbreekt (kolom in Teams als een team maar aan een league mee kan doen, koppeltabel als een team aan meerdere leagues mee kan doen) :)

Punten kun je misschien ook nog los koppelen, tabel Punten: PuntID, voor, aantal, en hetzelfde geld voor gap, dat zul je ook het beste los kunnen maken.

Overgens zit ik me sowieso nog wat te bedenken bij die uitslag/resultaat. Misschien is het nog beter om alleen posities+tijden op te slaan. Als je weet dat iemand op 3:11 is gefinished, en die voor hem op 2:58, kun je het gat met die voor hem berekenen, en eventuele punten kun je ook berekenen. Maar dat moet je zelf even kijken, wat je daar het beste lijkt.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Met jou opmerkingen erin verwerkt zou het er dus zo uitkomen te zien?


Dus zoals het er nu naar uit ziet:
Een gebruiker is coureur, deze zit in een team, dit team neemt deel aan één of meer leagues.
De coureur kan alleen rond rijden in een door de admin beschikbaar gestelde auto.

De coureur doet mee aan races die gekoppeld zijn aan het leagueid, de resultaten van elke race komt in de tabel resultaat te staan en aan de hand van teamid en coureurid worden er punten aan gekoppeld.
En elke race is gekoppeld aan het daar bij behorende circuit.

Ja over dat wat er allemaal aan extra dingen in de tabel Resultaat komt weet ik allemaal nog niet, aangezien ik van plan ben om hiervoor de logfile te gebruiken die tijdens de race gemaakt word, en deze in te lezen en aan de hand hiervan te gaan berekenen.

We komen er wel :p

[ Voor 20% gewijzigd door FabiandJ op 23-12-2016 11:56 ]


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Hmm, toch nog foutje in wat ik zelf had bedacht :P Verhuis Coureur_Team.TeamID naar Coureurs, en dan kan Coureur_Team helemaal weg. En die Teams.CoureurID hoort sowieso niet, dus kan weg.

En Punten/Resultaat is nu helemaal fout :9
Waar ik aan zat te denken:
Uitslag:
UitslagID (PK)
RaceID (FK)

Uitslag_Coureur:
UitslagID (PK, FK)
CoureurID (PK, FK)
tijd

Wat kun je hiermee? Bij een race/uitslag kun je alle coureurs ophalen, je kunt ze een positie geven (sorteren op tijd, korste tijd is of course de winnaar), je kunt de achterstand met elke andere coureur bepalen, de finishtijd sla je op dus heb je. Punten kun je @runtime berekenen, dus hoef je in principe niet op te slaan (of je hangt nog een Punten tabel aan Uitslag_Coureur: PuntID, voor (waarom die die punten dus heeft), aantal)

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Zo heb het weer aangepast.


Zo beter?

[ Voor 38% gewijzigd door FabiandJ op 23-12-2016 11:56 ]


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Beschikbare_autos heeft een relatie met races, moet die niet naar leagues? En moet er dan geen relatie zijn van Races naar Leagues (Races.LeaguesID)? Races.circuitnaam moet je circuitID van maken (en dus ook de FK omleggen). Het klopt dat een team mee kan doen aan meerdere leagues (anders kan die Teams_League weg, en moet je LeagueID in Teams zetten)? Ow, en nog even de samengestelde PK bij Uitslag_Coureur maken, op uitslagID en coureurID

Voor de rest klopt het volgensmij allemaal wel, als jij je data erin hebt die je erin wil hebben (eventueel kun je de punten ook nog in een tabel zetten, hoe je dat het beste kunt doen heb ik in de vorige post al aangegeven)

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
RobertMe schreef op woensdag 29 april 2009 @ 20:43:
Beschikbare_autos heeft een relatie met races, moet die niet naar leagues? En moet er dan geen relatie zijn van Races naar Leagues (Races.LeaguesID)? Races.circuitnaam moet je circuitID van maken (en dus ook de FK omleggen). Het klopt dat een team mee kan doen aan meerdere leagues (anders kan die Teams_League weg, en moet je LeagueID in Teams zetten)? Ow, en nog even de samengestelde PK bij Uitslag_Coureur maken, op uitslagID en coureurID

Voor de rest klopt het volgensmij allemaal wel, als jij je data erin hebt die je erin wil hebben (eventueel kun je de punten ook nog in een tabel zetten, hoe je dat het beste kunt doen heb ik in de vorige post al aangegeven)
Beschikbare_autos gaat ook naar leagues, alleen als je die lijn ziet lijkt het alsof dat niet zo is.
Dus Beschikbare_autos.leagueid > Leagues.leagueid en Teams_League.leagueid > Leagues.leagueid en Races.leagueid > Leagues.leagueid.

En ja het klopt dat een team mee kan doen aan meerdere leagues, als ik naar mezelf kijk rij ik nu al 3 seizoenen met dezelfde teamnaam rond in een nieuwe league.
Ik heb bij Uitslag_Coureur een PK op zowel uitslagid en coureurid gezet, maar moet dit dan ook niet gebeuren bij de tabel Teams_League en ditzelfde geld voor de tabel Uitslag ik weet het niet zeker hoor dus daarom vraag ik het voor de zekerheid?

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Beschikbare_autos gaat ook naar leagues, alleen als je die lijn ziet lijkt het alsof dat niet zo is.
Dus Beschikbare_autos.leagueid > Leagues.leagueid en Teams_League.leagueid > Leagues.leagueid en Races.leagueid > Leagues.leagueid.
Zoiets vermoede ik al
En ja het klopt dat een team mee kan doen aan meerdere leagues, als ik naar mezelf kijk rij ik nu al 3 seizoenen met dezelfde teamnaam rond in een nieuwe league.
Zelfde teamnaam betekend niet zelfde team, zelfde team is het pas als het ID hetzelfde is.
Ik heb bij Uitslag_Coureur een PK op zowel uitslagid en coureurid gezet, maar moet dit dan ook niet gebeuren bij de tabel Teams_League en ditzelfde geld voor de tabel Uitslag ik weet het niet zeker hoor dus daarom vraag ik het voor de zekerheid?
Bij Teams_League moet je wel een samengestelde PK maken, bij Uitslag niet. Verschil, Teams_League is een pure koppeltabel waar niet naar gelinkt word, hier heb je geen eigen ID in, dus worden die 2 kolomen de PK. Bij uitslag heb je wel een uniek (eigen) ID, omdat er vanuit Uitslag_Coureur ook nog naar gelinkt word.

Maar zo ziet alles er goed uit, moet je alleen nog even kijken of voor jouw alles logisch/makkelijk eruit te halen is. Maar daar zul je zelf wel achter komen en zelf wat kleine aanpassingen kunnen doen aan het model.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
RobertMe schreef op donderdag 30 april 2009 @ 11:54:
[...]

Zoiets vermoede ik al


[...]

Zelfde teamnaam betekend niet zelfde team, zelfde team is het pas als het ID hetzelfde is.


[...]

Bij Teams_League moet je wel een samengestelde PK maken, bij Uitslag niet. Verschil, Teams_League is een pure koppeltabel waar niet naar gelinkt word, hier heb je geen eigen ID in, dus worden die 2 kolomen de PK. Bij uitslag heb je wel een uniek (eigen) ID, omdat er vanuit Uitslag_Coureur ook nog naar gelinkt word.

Maar zo ziet alles er goed uit, moet je alleen nog even kijken of voor jouw alles logisch/makkelijk eruit te halen is. Maar daar zul je zelf wel achter komen en zelf wat kleine aanpassingen kunnen doen aan het model.
Oke bij Teams_League heb ik nu een samengesteld PK gemaakt.
Alleen dan dat stukje over de teams, voor elke nieuwe league moet je je opnieuw inschrijven, maar dan kan het puur toeval zijn dat dit dezelfde personen zijn en de zelfde teamnaam.
Dus ja moet de tabel Teams_League wel of niet blijven bestaan of moet ik die eruit gooien en dan Teams_League.leagueid naar de tabel Teams verplaatsen?

Dus even de twee opties zoals het zou kunnen dan:

[ Voor 10% gewijzigd door FabiandJ op 23-12-2016 11:56 ]


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Tja, die beslissing moet je zelf maken, afhankelijk van of anderen ook altijd weer hetzelfde team maken, of dat de meeste toch weer steeds een nieuw team maken.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
RobertMe schreef op donderdag 30 april 2009 @ 13:51:
Tja, die beslissing moet je zelf maken, afhankelijk van of anderen ook altijd weer hetzelfde team maken, of dat de meeste toch weer steeds een nieuw team maken.
Tja dat weet je dus nooit van te voren. Maar om het veilig te houden zou ik dan beter voor de optie gaan met de tabel Teams_League erin?

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
Ja, dan heb je altijd nog de mogelijkheid om de teams hetzelfde te houden over verschillende leagues.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Waarom kan de gebruikers en coureurtabellen niet gewoon samengevoegd worden? :)
Lijkt me dat dat een geheel is, wat nu (nutteloos) opgesplitst is.
Startnummer verschuif je dan naar de koppeltabel auto en leagues. :)

Ook lijkt het mij, dat een coureur rijd voor een team en niet een team dat rijdt voor een coureur.
Dus ik zou in de teamstabellen de coureur ID's opnemen ipv bij de coureurs de team ID's.

[ Voor 49% gewijzigd door CH4OS op 30-04-2009 14:26 ]


Acties:
  • 0 Henk 'm!

  • P-Storm
  • Registratie: September 2006
  • Laatst online: 10:02
Ligt het nu aan mij, of is de Referentiële integriteit in access niet is vastgelegd. Dit kan je doen, door op de relaties, rechts te klikken en dan die dingen aan te vinken. Mij is altijd aangeleerd om cascading delete en cascading update aan te zetten.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
GJtje schreef op donderdag 30 april 2009 @ 14:22:
Waarom kan de gebruikers en coureurtabellen niet gewoon samengevoegd worden? :)
Lijkt me dat dat een geheel is, wat nu (nutteloos) opgesplitst is.
Startnummer verschuif je dan naar de koppeltabel auto en leagues. :)

Ook lijkt het mij, dat een coureur rijd voor een team en niet een team dat rijdt voor een coureur.
Dus ik zou in de teamstabellen de coureur ID's opnemen ipv bij de coureurs de team ID's.
Ja daar heb je eigenlijk wel gelijk in over de tabellen Gebruikers en Coureurs.
Nou is me alleen niet helemaal duidelijk waar ik autoid en startnummer in moet zetten in welke tabel.
Of dat er een koppeltabel moet komen, alleen is me niet duidelijk waar die precies tussen moet komen.
Ik heb in het plaatje hieronder de tabel Coureur nog even laten staan zodat je makkelijker kan zien wat in die tabel stond.
Mijagis schreef op donderdag 30 april 2009 @ 14:28:
Ligt het nu aan mij, of is de Referentiële integriteit in access niet is vastgelegd. Dit kan je doen, door op de relaties, rechts te klikken en dan die dingen aan te vinken. Mij is altijd aangeleerd om cascading delete en cascading update aan te zetten.
Heb je gelijk in, heb nu in een nieuwe versie dit toegevoegd alleen bij veel tabellen was dit niet mogelijk. Dus moet ik kijken naar de jointype, kloppen de jointypes zoals ik ze nu heb?

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 15:09
GJtje schreef op donderdag 30 april 2009 @ 14:22:
Waarom kan de gebruikers en coureurtabellen niet gewoon samengevoegd worden? :)
Lijkt me dat dat een geheel is, wat nu (nutteloos) opgesplitst is.
Startnummer verschuif je dan naar de koppeltabel auto en leagues. :)
Als een gebruiker als meerdere coureurs terug kan komen/in meerdere teams kan zitten, moet je wel de afsplitsing hebben, en een startnummer wil je misschien per league apart hebben (wat nu ook niet het geval is, zie ik nu). Dan zou je al eerder een koppelingtabel moeten leggen tussen Leagues Gebruikers, waaruit dan dus weer het logische gevolg, Coureur komt, en daaraan koppel je dan een team.
GJtje schreef op donderdag 30 april 2009 @ 14:22:
Ook lijkt het mij, dat een coureur rijd voor een team en niet een team dat rijdt voor een coureur.
Dus ik zou in de teamstabellen de coureur ID's opnemen ipv bij de coureurs de team ID's.
Is wel zo, maar de plaats waar je het bijhoud is niet zo belangrijk, als je het in Teams wil zetten, ga je kolommen nummeren, (coureur1, coureur2 e.d.), en dat is al helemaal niet de bedoeling. Hoe die nu is lijkt het mij het beste.

Acties:
  • 0 Henk 'm!

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
RobertMe schreef op donderdag 30 april 2009 @ 15:20:
[...]

Als een gebruiker als meerdere coureurs terug kan komen/in meerdere teams kan zitten, moet je wel de afsplitsing hebben, en een startnummer wil je misschien per league apart hebben (wat nu ook niet het geval is, zie ik nu). Dan zou je al eerder een koppelingtabel moeten leggen tussen Leagues Gebruikers, waaruit dan dus weer het logische gevolg, Coureur komt, en daaraan koppel je dan een team.


[...]

Is wel zo, maar de plaats waar je het bijhoud is niet zo belangrijk, als je het in Teams wil zetten, ga je kolommen nummeren, (coureur1, coureur2 e.d.), en dat is al helemaal niet de bedoeling. Hoe die nu is lijkt het mij het beste.
Een gebruiker is en blijft één persoon, maar kan wel tegelijk aan meedere leagues tegelijk meedoen. Tevens blijven alle gereden leagues etc gewoon in de database staan zodat je later mooie statistieken ervan kan maken. Dus dat een gebruiker aan meedere leagues mee moet kunnen doen lijkt me duidelijk, maar dan wel per league maar in 1 team.

En per league worden opnieuw de startnummers vast gelegd aangezien de kampioen van een league in de league erop NR1 krijgt als startnummer en zijn teammaat als startnummer 2. Alle andere deelnemers mogen vervolgens hun voorkeur opgeven.

Dus wat moet ik nou precies doen? Wat moet er veranderd worden? En op basis van welk database ontwerp gaan we dan uit?

[ Voor 12% gewijzigd door FabiandJ op 23-12-2016 11:57 ]

Pagina: 1