Changement d'année compteur à 0

Slylia Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -  
Slylia Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai créé un compteur qui fonctionnait sous le format année-numéro_de_commande.
Comme nous arrivons à la fin de l'année je souhaiterai que mon compteur change et que le numéro de commande soit remis à 0.
Mon code actuel donne :
<td> N° COMMANDE : </td> 
  <td style="width:80%">  
  <?php 
   $req_COM_Id = ("SELECT MAX(COM_Id) FROM commande"); 
   $aff_COM_Id = mysql_query($req_COM_Id, $connect) or die($req_COM_Id . " - " . mysql_error()); 
   $affiche_COM_Id=mysql_result($aff_COM_Id,0);  
   $affiche_COM_Id = $affiche_COM_Id + 1; 
   $annee = substr (date('y'),-2); 
   ?>  
  <input type="text" readonly name="COM_Code" style="width:100%" value="<?php echo $annee."-".$affiche_COM_Id ; ?>"> <?php //} ?> 
  </td>


Comment faire pour que le numéro de commande se remette à 0 en fonction du chagement d'année ?
Je suis sûre que c'est tout simple mais sur le coup je ne vois pas comment faire.
A voir également:

2 réponses

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Il faut modifier ta requête SQL pour ne prendre que le max pour l'année en cours. Pour ça, il faut que l'année en question soit stockée dans ta base. Ça peut être un champ à part entière, une date de commande, ou peut-être un COM_Code comme on le voit dans ton code. La requête devra être un peu adaptée suivant le cas de figure.

Par exemple, si ton COM_Code (annee-Id) est enrigstré en base, tu peux faire comme ça :
   $annee = substr (date('y'),-2); 
   $req_COM_Id = ("SELECT ISNULL(MAX(COM_Id), 0) FROM commande WHERE COM_Code LIKE '$annee%'"); 


Xavier
0
Slylia Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   1
 
Je n'arrive pas à comprendre la quète avec le ("SELECT ISNULL(MAX(COM_Id), 0) peux-tu me l'expliquer ?
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Le point important, c'est le WHERE qui impose de ne rechercher que sur une année précise.
Sauf que si cette année ne comporte pas encore de commande, la requête MAX(COM_Id) renverra NULL.
Pour éviter cela, la fonction ISNULL(A, B) renvoie B si A vaut NULL, A sinon. Comme ça tu es sûr d'avoir une valeur numérique en sortie.

Au passage, le code tel que je te l'ai donné te donnera comme premier COM_Id de l'année la valeur 1. Si tu veux commencer à 0, il faut remplacer ISNULL(..., 0) par ISNULL(..., -1)

Xavier
0
Slylia Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   1
 
Je t'avoue que j'ai un peu de mal à savoir dans quel ordre je dois faire les choses.
Comme on arrive à la fin de l'année, il faut qu'au 1er janvier 2010 le nouveau COM_Num soit 11-001.
Voila la structure de ma table commande :
CREATE TABLE IF NOT EXISTS 'commande' (
'COM_Id' int(11) NOT NULL AUTO_INCREMENT,
'COM_Code' varchar(15) NOT NULL,
'COM_Date' date NOT NULL,
'COM_FRS_Id' int(11) NOT NULL,
'COM_LAB_Id' int(11) NOT NULL,
'COM_DEM_Id' int(11) NOT NULL,
'COM_Inactive' text NOT NULL,
'COM_Rec' binary(1) NOT NULL COMMENT 'Commande dans fichier ou non',
'COM_Commentaire' text NOT NULL,
PRIMARY KEY ('COM_Id'),
UNIQUE KEY 'COM_Code' ('COM_Code')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=283 ;

Pour structurer mon algorithme il faut que je cherche l'année actuelle et que je fasse une boucle pour augmenter de 1 à chaque nouvelle commande ?
0