select grootste die begint met jaar
ik ben bezig met een contacten adminstratie applicatie.
ieder contact heeft een code. De eerste 2 cijfers zijn het jaar (08) en de overige 5 het nummer, eerste = 1, tweede = 2, ...
nu moet er automatisch een nieuwe bedacht worden en bnij 2009 moet hij weer op 1 springen.
Nu heb ik het tweede probleempje. Als ik de contactcode beginnent met een 0 op slaan verdwijnt de nul als ik int gebruik, ik heb nu varchar maar das een beetje omslagtig...
Gr Johan
Zet je jaar in een veld, zet die volgende cijfers in een ander veld.
Zo kan je bv. onmiddellijk sorteren op jaar.
Het is geen enkel probleem om strings terug aan mekaar te plakken. Het is al net iets moeilijker om strings uit mekaar te trekken.
Niet dat het veel uitmaakt, maar ik zou het jaar in 4 cijfers in de db zetten. Daarna kan je nog doen wat je wil.
Johan Versteeg schreef op 16.07.2008 10:24:
... De eerste 2 cijfers zijn het jaar (08) en de overige 5 het nummer, eerste = 1, tweede = 2, ...
nu moet er automatisch een nieuwe bedacht worden en bnij 2009 moet hij weer op 1 springen.
nu moet er automatisch een nieuwe bedacht worden en bnij 2009 moet hij weer op 1 springen.
Dit zal je toch wat beter moeten uitleggen.
Wanneer je bv. PostgreSQL gebruikt, kun je zelf een datatype aanmaken. Dan kun je dus ook dit soort dingen laten maken, geen enkel probleem. Het begint in elk geval met een sequence en een stored procedure.
is het niet mogelijk om alle codes uit te leven die beginnen met jaar(vanuit php.
Dis zoiets als
$Sql = "Select * WHERE Contactcode = " . date(Y) . "*";
dat kan met LIKE of nie...
Leg eerst eens deftig uit wat er in die code precies moet komen, na die twee cijfers die het jaar moeten voorstellen.
Je maakt een nieuwe tabel aan voor het bijhouden van het jaar en het nummer dat samen die code maakt.
CREATE TABLE `tellerkolom` (
`jaar` YEAR NOT NULL ,
`nummer` INT NOT NULL
) TYPE = MYISAM ;
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$server = "****";
$user = "****";
$password = "****";
$database = "****";
mysql_connect($server, $user, $password);
mysql_select_db($database);
function check_nieuw_jaar()
{
$sql_sel = "SELECT jaar, nummer FROM tellerkolom";
$res_sel = mysql_query($sql_sel);
if(!$res_sel)
{
return 'Select Error';
}
else
{
if(mysql_num_rows($res_sel) == 0)
{
// Hier is er nog geen record dus wordt er een gemaakt met de beginwaarden
$sql_ins = "INSERT INTO tellerkolom (jaar, nummer) VALUES (" . date("Y") . ", 1)";
$res_ins = mysql_query($sql_ins);
if(!$res_ins)
{
return 'Insert Error';
}
}
else
{
$row = mysql_fetch_assoc($res_sel);
if($row['jaar'] != date("Y"))
{
// Hier is het blijkbaar een nieuw jaar dus resetten en het jaar verhogen
$sql_upd = "UPDATE tellerkolom SET jaar = " . date("Y") . ", nummer = 1";
$res_upd = mysql_query($sql_upd);
if(!$res_upd)
{
return 'Update Error';
}
}
}
}
return false;
}
function nieuwe_code()
{
$sql_sel = "SELECT jaar, nummer FROM tellerkolom";
$res_sel = mysql_query($sql_sel);
if(!$res_sel)
{
return 'Select Error';
}
else
{
$row = mysql_fetch_assoc($res_sel);
// Hier wordt de code samengesteld
return substr($row['jaar'], 2) . str_pad($row['nummer'], 5, "0", STR_PAD_LEFT);
}
}
function verhoog_nummer()
{
// Hier wordt de teller met 1 verhoogd
$sql_upd = "UPDATE tellerkolom SET nummer = nummer + 1";
$res_upd = mysql_query($sql_upd);
if(!$res_upd)
{
return 'Update Error';
}
return false;
}
$fout = check_nieuw_jaar();
if($fout)
{
echo $fout;
}
// Hier komt je script te staan.
// Als je een nieuw contact invoert haal je zijn/haar code op met
$code = nieuwe_code();
// Dan insert je dat contact met die code
// En alléén als de insert is gelukt (checken dus) doe je dit
if('het inserten is gelukt')
{
$fout = verhoog_nummer();
if($fout)
{
echo $fout;
}
}
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$server = "****";
$user = "****";
$password = "****";
$database = "****";
mysql_connect($server, $user, $password);
mysql_select_db($database);
function check_nieuw_jaar()
{
$sql_sel = "SELECT jaar, nummer FROM tellerkolom";
$res_sel = mysql_query($sql_sel);
if(!$res_sel)
{
return 'Select Error';
}
else
{
if(mysql_num_rows($res_sel) == 0)
{
// Hier is er nog geen record dus wordt er een gemaakt met de beginwaarden
$sql_ins = "INSERT INTO tellerkolom (jaar, nummer) VALUES (" . date("Y") . ", 1)";
$res_ins = mysql_query($sql_ins);
if(!$res_ins)
{
return 'Insert Error';
}
}
else
{
$row = mysql_fetch_assoc($res_sel);
if($row['jaar'] != date("Y"))
{
// Hier is het blijkbaar een nieuw jaar dus resetten en het jaar verhogen
$sql_upd = "UPDATE tellerkolom SET jaar = " . date("Y") . ", nummer = 1";
$res_upd = mysql_query($sql_upd);
if(!$res_upd)
{
return 'Update Error';
}
}
}
}
return false;
}
function nieuwe_code()
{
$sql_sel = "SELECT jaar, nummer FROM tellerkolom";
$res_sel = mysql_query($sql_sel);
if(!$res_sel)
{
return 'Select Error';
}
else
{
$row = mysql_fetch_assoc($res_sel);
// Hier wordt de code samengesteld
return substr($row['jaar'], 2) . str_pad($row['nummer'], 5, "0", STR_PAD_LEFT);
}
}
function verhoog_nummer()
{
// Hier wordt de teller met 1 verhoogd
$sql_upd = "UPDATE tellerkolom SET nummer = nummer + 1";
$res_upd = mysql_query($sql_upd);
if(!$res_upd)
{
return 'Update Error';
}
return false;
}
$fout = check_nieuw_jaar();
if($fout)
{
echo $fout;
}
// Hier komt je script te staan.
// Als je een nieuw contact invoert haal je zijn/haar code op met
$code = nieuwe_code();
// Dan insert je dat contact met die code
// En alléén als de insert is gelukt (checken dus) doe je dit
if('het inserten is gelukt')
{
$fout = verhoog_nummer();
if($fout)
{
echo $fout;
}
}
?>
Edit: Beetje commentaar er bij gezet
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
wat dacht je hiervan..;)
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
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
$Jaar = date('y');
$Sql = "SELECT * FROM persoonlijke_gegevens WHERE Contactcode Like '" . $Jaar . "%' ORDER BY Contactcode DESC LIMIT 0 , 1";
// Als er errors zijn
if(!$Res = mysql_query($Sql)) { trigger_error(mysql_error().'<br />In query: '.$Sql);}
// Als er GEEN velden gevonden zijn
elseif(mysql_num_rows($Res) == 0)
{
echo $Jaar . "00001";
}
else
{
while($Row = mysql_fetch_assoc($Res))
{
// echo $Row['Contactcode'] ." <br>";
$Contactcode = $Row['Contactcode'] + 1;
}
If($Jaar < 10)
{
echo "0" . $Contactcode;
}
else
{
echo $Contactcode;
}
}
$Sql = "SELECT * FROM persoonlijke_gegevens WHERE Contactcode Like '" . $Jaar . "%' ORDER BY Contactcode DESC LIMIT 0 , 1";
// Als er errors zijn
if(!$Res = mysql_query($Sql)) { trigger_error(mysql_error().'<br />In query: '.$Sql);}
// Als er GEEN velden gevonden zijn
elseif(mysql_num_rows($Res) == 0)
{
echo $Jaar . "00001";
}
else
{
while($Row = mysql_fetch_assoc($Res))
{
// echo $Row['Contactcode'] ." <br>";
$Contactcode = $Row['Contactcode'] + 1;
}
If($Jaar < 10)
{
echo "0" . $Contactcode;
}
else
{
echo $Contactcode;
}
}