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
Noppes Homeland op 30/04/2011 11:55:00


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:


Kan je dan beter niet kijken naar hoe oud iemand is en dat verwerken in de CASE WHEN
Noppes Homeland op 30/04/2011 13:20:19

Kan je dan beter niet kijken naar hoe oud iemand is en dat verwerken in de CASE WHEN


Dat is natuurlijk ook mogelijk, maar het moet gewoonweg ook kunnen in 1 update query mysql. Ik zoek nog even verder.

Als je die switch netjes uitschrijft naar SQL CASE dan ben je er toch.

Maar ja ik zal toch gaan voor leeftijds categorisatie, dan wordt de CASE WHEN ook niet zo onoverzichtelijk
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

enz enz

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.

YEAR(NOW()) is de juiste syntax.
Opgelost, het kan zo makkelijk zijn:


<?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

Reageren