Door
bart nukem
op 30-04-2011 10:21
gewijzigd op 30-04-2011 14:34
2.168 views
Hoi, hopelijk kan iemand mij helpen met onderstaande code:
<?php
//verbinden met database
include("contactdb.php");
$query = "UPDATE aanmelding SET cat =
CASE EXTRACT(YEAR FROM gebdat)
WHEN '2000' THEN Pupullen A
WHEN '2001' THEN Pupullen B
WHEN '2002' THEN Pupullen C
ELSE Junioren
END";
$result = mysql_query($query) or die ("FOUT1: " . mySql_error());
?>
De code doet precies wat het moet doen, de kolom cat wordt geupdate afhankelijk van de inhoud van de kolom gebdat. Dus indien gebdat = 2000 krijgt de kolom cat Pupillen A. Echter nu veranderd dit elk jaar en moet alles hardcoded opnieuw aangepast worden. Ik wil het zo maken dat van het huidige jaar 11 jaar worden afgetrokken en de uitkomst daarvan worden vergeleken met de kolom gebdat. Zie onderstaand niet werkend voorbeeld:
<?php
//verbinden met database
include("contactdb.php");
$query = "UPDATE aanmelding SET cat =
CASE EXTRACT(YEAR FROM gebdat)
WHEN 'YEAR(NOW) -11' THEN Pupullen A
WHEN 'YEAR(NOW) -12' THEN Pupullen B
WHEN 'YEAR(NOW) -13' THEN Pupullen C
ELSE Junioren
END";
$result = mysql_query($query) or die ("FOUT1: " . mySql_error());
?>
Iemand enig idee om mij wat verder te helpen, bij voorbaat dank.
CASE WHEN '2000'
THEN 'Pupillen A'
ELSE CASE WHEN '2001'
THEN 'Pupillen B'
ELSE CASE WHEN '2002'
THEN 'Pupillen C'
ELSE 'Junioren'
END
END
END
CASE EXTRACT(YEAR FROM gebdat)
WHEN YEAR(NOW) -11 THEN 'Pupullen A'
WHEN YEAR(NOW) -12 THEN 'Pupullen B'
WHEN YEAR(NOW) -13 THEN 'Pupullen C'
ELSE 'Junioren'
END
CASE WHEN '2000'
THEN 'Pupillen A'
ELSE CASE WHEN '2001'
THEN 'Pupillen B'
ELSE CASE WHEN '2002'
THEN 'Pupillen C'
ELSE 'Junioren'
END
END
END
Noppes bedankt voor de reactie, maar dit is niet de oplossing. Ik wil in 1 mysql query de gegevens ophalen uit het datumveld gebdat en afhankelijk daarvan het veld cat updaten. Dus stel het huidige jaar min 10 is iemand in de cat(tegorie) Junioren A. Dus meer zoals hieronder bij de code voor het inserten.
switch($jaar) {
case $jaar > date('Y')-7:
$cat = "Te jong";
if ($geslacht=="M")
$kncode = 0;
else
$kncode = 0;
break;
case $jaar == date('Y')-7:
$cat = "Minipupillen";
if ($geslacht=="M")
$kncode = 2;
else
$kncode = 1;
break;
case $jaar == date('Y')-8:
$cat = "Pupillen C";
if ($geslacht=="M")
$kncode = 4;
else
$kncode = 3;
break;
case $jaar == date('Y')-9:
$cat = "Pupillen B";
if ($geslacht=="M")
$kncode = 6;
else
$kncode = 5;
break;
case $jaar == date('Y')-10:
$cat = "Pupillen A";
if ($geslacht=="M")
$kncode = 8;
else
$kncode = 7;
break;
case $jaar == date('Y')-11:
$cat = "Pupillen A";
if ($geslacht=="M")
$kncode = 8;
else
$kncode = 7;
break;
case $jaar == date('Y')-12:
$cat = "Junioren D";
if ($geslacht=="M")
$kncode = 10;
else
$kncode = 9;
break;
Hierboven is de $jaar het geboorte jaar van de deelnemer. Dit heb ik gebruikt voor het inserten, maar aangezien wij allemaal ouder worden is de junoren A volgend jaar al bij de senioren, vandaar de berekening $jaar == date('Y')-11:
De leeftijd is niet bepalend, het geboortejaar wel. Als ik onderstaande regel juist aanpas moet het werken:
WHEN '2000' THEN Pupullen A enz enz
moet worden
WHEN huidig jaar - EXTRACT(YEAR FROM gebdat) is gelijk aan 11 THEN Pupillen A
WHEN huidig jaar - EXTRACT(YEAR FROM gebdat) is gelijk aan 10 THEN Pupillen B
De expressie YEAR(NOW) is ongeldig... je stuurt MySql op pad om het jaar van de waarde in kolom NOW te zoeken, in plaats van wat je wilt: het huidige jaar.
<?php
//verbinden met database
include("contactdb.php");
$jaar = date('Y');
$query = "UPDATE aanmelding SET cat =
CASE EXTRACT(YEAR FROM gebdat)
WHEN $jaar -7 THEN 'Minipupil'
WHEN $jaar -8 THEN 'Pupillen C'
WHEN $jaar -9 THEN 'Pupillen B'
WHEN $jaar -10 THEN 'Pupillen D'
ELSE 'Junioren'
END";
$result = mysql_query($query) or die ("FOUT1: " . mySql_error());
?>
gebruik een nette foutafhandeling idpv or die, waarom zou je script moeten doodgaan voor een foutje? Indien jij een foutje maakt ga je toch ook niet dood?
Jasper, je hebt gelijk en ik heb een prachtige foutafhandeling van jou klaar staan, het ging me echter nu alleen voor het resultaat... in ieder geval bedankt