update query' OPGELOST
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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());
?>
//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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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());
?>
//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
Code (php)
1
2
3
4
5
6
7
8
9
10
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
THEN 'Pupillen A'
ELSE CASE WHEN '2001'
THEN 'Pupillen B'
ELSE CASE WHEN '2002'
THEN 'Pupillen C'
ELSE 'Junioren'
END
END
END
Code (php)
1
2
3
4
5
6
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
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
Noppes Homeland op 30/04/2011 11:55:00:
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)
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
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;
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.
Maar ja ik zal toch gaan voor leeftijds categorisatie, dan wordt de CASE WHEN ook niet zo onoverzichtelijk
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
YEAR(NOW()) is de juiste syntax.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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());
?>
//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());
?>
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?
gebruik een 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
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)
1
2
3
4
5
6
7
8
9
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
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