update query' OPGELOST

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart nukem

bart nukem

30/04/2011 10:21:57
Quote Anchor link
Hoi, hopelijk kan iemand mij helpen met onderstaande code:

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

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
<?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.
Gewijzigd op 30/04/2011 14:34:35 door Bart nukem
 
PHP hulp

PHP hulp

22/02/2025 22:10:54
 
Noppes Homeland

Noppes Homeland

30/04/2011 11:55:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
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                


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
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
Gewijzigd op 30/04/2011 12:20:27 door Noppes Homeland
 
Bart nukem

bart nukem

30/04/2011 12:48:41
Quote Anchor link
Noppes Homeland op 30/04/2011 11:55:00:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
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.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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:
 
Noppes Homeland

Noppes Homeland

30/04/2011 13:20:19
Quote Anchor link
Kan je dan beter niet kijken naar hoe oud iemand is en dat verwerken in de CASE WHEN
 
Bart nukem

bart nukem

30/04/2011 13:25:37
Quote Anchor link
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.
 
Noppes Homeland

Noppes Homeland

30/04/2011 13:27:41
Quote Anchor link
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
 
Bart nukem

bart nukem

30/04/2011 13:35:02
Quote Anchor link
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
 
Daniel O

Daniel O

30/04/2011 14:02:55
Quote Anchor link
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.
 
Bart nukem

bart nukem

30/04/2011 14:33:49
Quote Anchor link
Opgelost, het kan zo makkelijk zijn:

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
<?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());

?>
 
Jasper DS

Jasper DS

30/04/2011 14:38:15
Quote Anchor link
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?
 
Bart nukem

bart nukem

30/04/2011 14:46:20
Quote Anchor link
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
 
Roger Keulen

Roger Keulen

01/05/2011 21:28:06
Quote Anchor link
Als je toch een INSERT of UPDATE doet van uit PHP dan kun je de keuze in welke klassen iemand speelt ook in de PHP omgeving doen.

Dus bij de INSERT of UPDATE mee geven in welke klassen hij speelt.

De DATABASE moet dan gaan controleren of dit wel het geval is. Maar soms wilt men deze regel ook weer kunnen overschrijven. Dus ik zou het aan de client/PHP kant gaan oplossen. Wat je ook kun doen is gewoon er voor zorgen dat de user interface alvast de juiste klasse selecteerd bij het invoeren van de geboorte datum, dan kun je ook nog van de regel afwijken. Je moet dan alleen een VIEW maken met daarin iedereen met een afwijkende geboorte datum.


Groetjes: Roger Keulen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
CREATE VIEW view_SPELERS AS
  SELECT *,
  CASE YEAR(CURRENT_TIMESTAMP)-YEAR(splGEBDAT)
    WHEN 7 THEN 'Pupillen A'
    WHEN 8 THEN 'Pupillen B'
    WHEN 9 THEN 'Pupillen C'
    ELSE 'Junioren' END AS splKLASSEN
  FROM `spl_SPELERS`
  ORDER BY splKLASSEN, splACHTERNAAM, splVOORNAAM


Alleen wat als je jarig bent tijdens de tweede helft?


Groetjes: Roger Keulen.
Gewijzigd op 01/05/2011 21:48:53 door Roger Keulen
 



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.