Incrémentation d'un champs par tranche

Résolu
Bonjour,
je voudrais créer un champs dans une table qui s'incrémente à chaque entrée jusqu'à ce qu'on arrive à la 250 ème entrée ça recommence de 1 jusq'à 250 et ainsi de suite je dois faire une boucle mais je n'arrive pas à avoir le résultat
est ce que vous avez une idée?
Configuration: Windows XP
Firefox 3.0.11

19 réponses

  1. Salut,
    CREATE SEQUENCE MA_SEQU INCREMENT BY 1 MINVALUE 1 MAXVALUE 250 CACHE 249 CYCLE NOORDER;
    Si tu es sur oracle...
    @+
    1. bonjour, merci pour ta réponse mais moi je ne travaille pas avec oracle mais avec php/mysql
      alors si vous avez une idée je vous serrais très reconnaissante
      merci
      1. Tu veux que ce soit automatique dans la BDD la remise à 0 de l'auto incremente pour une table donnée c'est ça ?
        1. bonjour,
          Oui ça peut être une solution est ce que tu sais comment faire?
          merci
          1. Salut,
            tu peux faire une fonction.....
            CREATE FUNCTION Ma_Functi(num INT(10))
            RETURNS INT(10)
            BEGIN
            DECLARE
            nbr INT(10);
            DECLARE
            nb INT(10);
            SELECT COUNT(*) INTO nb FROM ma_table;
            IF (nb=0) THEN
            SET nbr=1;
            ELSE
            SELECT mon_champ_a_incrementer INTO nbr FROM ma_table
            ORDER BY index DESC
            LIMIT 1;
            SET nbr=nbr+1;
            IF nbr>num THEN
            	SET nbr=1;
            END IF;
            END IF;
            RETURN nbr;
            END$$

            Apres tu fais ton insert:
            insert into ma_table values (index,....,...,..,...,...,Ma_Functi(250));
            C'est une piste!!
            @+
            1. salut
              merci pour ta solution je crois qu'elle peut marcher comme je suis débutante je vais essayer de bie comprendre ton idée et de l'appliquer je te donnerai des nouvelle
              merci
          2. Bonjour j'ai essayé d'appliquer ton idée mais ça n'a pas marché
            le champs est toujours à zéro je te donne ma fonction je te rappelle que je travaille en php/mysql
            function num_distributeur($num)
            {
            mysql_connect("localhost", "root", ""); // Connexion à MySQL
            mysql_select_db("mabase"); // Sélection de la base coursph
            mysql_query("select Count(customers_id) into $nb from customers")or die ('Erreur SQL !'.mysql_error());
            if ($nb==0)
            {
            $nbr=1;
            }
            else
            {
            // mysql_query("select customers_id into $nb from customers order by customers_id DESC LIMIT 1 ")or die ('Erreur SQL !'.mysql_error());
            $nbr=$nbr+1;
            if ($nbr> $num)
            {
            $nbr=1;
            }
            }
            return $nbr;
            }
            en suite je fait
            mysql_query("INSERT INTO customers VALUES('','','$prenom','$nom','$datnais','$email','$adresse','$tel','$fax','".tep_encrypt_password($password)."','','','num_distributeur(250)')")or die ('Erreur SQL !'.mysql_error());
            est ce que tu peux m'aider?
            1. Salut,
              le plus simple est certainement de créer la procédure dans la db mysql, puis tu fais un insert classique en php:
              mysql_query("INSERT INTO customers VALUES(ma_fonctioon(250)'','','$prenom','$nom','$datnais','$email','$adresse','$tel','$fax','".tep_encrypt_password($password)."','','','num_distributeur(250)')")or die ('Erreur SQL !'.mysql_error());
              @+
              1. Bonjour,
                merci de m'avoir répondu si rapidement mais je n'ai pas compris ta solution je te rappelle que je suis débutante alors est ce que tu peux m'expliquer c'est quoi créer la procédure dans la db mysql s'il te plait
                1. salut,
                  tu te connectes à la base mysql
                  mysql -u nom_utilisateur -pton_password nom_de_la_base_a_utiliser
                  tu as le prompt mysql comme suit et tu tapes:
                  mysql>delimiter $$
                  mysql>CREATE FUNCTION Ma_Functi(num INT(10))
                  RETURNS INT(10)
                  BEGIN
                  DECLARE
                  nbr INT(10);
                  DECLARE
                  nb INT(10);
                  SELECT COUNT(*) INTO nb FROM ma_table;
                  IF (nb=0) THEN
                  SET nbr=1;
                  ELSE
                  SELECT mon_champ_a_incrementer INTO nbr FROM ma_table
                  ORDER BY index DESC
                  LIMIT 1;
                  SET nbr=nbr+1;
                  IF nbr>num THEN
                  SET nbr=1;
                  END IF;
                  END IF;
                  RETURN nbr;
                  END$$
                  mysql> delimiter ;
                  mysql>quit

                  Tu modifies les champs qui vont bien pour que ca colle à ta table et tes champs et c'est tout!!
                  Apres tu peux utiliser cette fonction dans tes scripts....
                  @+
                  1. bonjour merci mais avant d'essayer je te pose une question dans ta fonction tu utilise begin end ... mais c'est pas du php ça??
                    1. Ben c'est une fonction Mysql!!
                      que tu pourras utiliser avec un script php... quel est le probleme?
                      1. bonjour, merci mais je n'ai pas compris parce que j'insert ton code mais j'ai des erreurs c'est comme s,il n'arrive pas à lire le code par ce que ce n'est pas du php
                        1. Salut,
                          <?php
                          $conn=mysql_connect("localhost", "user","mon_pass") or die("error connection");
                          mysql_select_db("test",$conn) or die("error db");
                          $quer= "INSERT INTO test_table (ind,incr) VALUES (10,ma_function(3))";
                          echo $quer;
                          $res=mysql_query($quer);
                          if (!$res) {
                          die('Invalid query: ' . mysql_error());
                          }
                          ?>
                          j'ai pas d'erreur.....
                          C'est quoi ton message d'erreur??
                          1. voici le code que j'insert mais le champs est toujours égal à 5 je ne comprend pas pour quoi ça devrait marcher
                            function num_distributeur($num)
                            {
                            mysql_connect("localhost", "root", ""); // Connexion à MySQL
                            mysql_select_db("mabase"); // Sélection de la base coursph
                            $nb= mysql_query("select Count(*) from customers")or die ('Erreur SQL !'.mysql_error());
                            if ($nb==0)
                            {
                            $nbr=1;
                            }
                            else
                            {
                            $nbr =mysql_query("select customers_id from customers order by customers_id DESC LIMIT 1 ")or die ('Erreur SQL !'.mysql_error());
                            $nbr=$nbr+1;
                            if ($nbr> $num)
                            {
                            $nbr=1;
                            }
                            }
                            return $nbr;
                            }
                            mysql_query("INSERT INTO customers VALUES('','','$prenom','$nom','$datnais','$email','$adresse','$tel','$fax','".tep_encrypt_password($password)."','','','$D')")or die ('Erreur SQL !'.mysql_error());
                            aide moi s'il te plais
                            1. Salut,
                              function num_distributeur($num)
                              {
                              $conn=mysql_connect("localhost", "u","p") or die("error connection");
                              mysql_select_db("test",$conn) or die("error db");
                              $res= mysql_query("select Count(*) from ma_table")or die ('Erreur SQL !'.mysql_error());
                              if (!$res)
                              {
                              	$nbr=1;
                              }
                              else
                              {
                              	$n =mysql_query("select index,customer_id from ma_table order by index DESC LIMIT 1 ")or die ('Erreur SQL !'.mysql_error());
                              	$nbre=mysql_fetch_array($n);
                              	$nbr=$nbre['customer_id'];
                              	$nbr=$nbr+1;
                              	if ($nbr> $num)
                              	{
                              		$nbr=1;
                                      }
                              }
                              return $nbr;
                              } 
                              ?>

                              Je suis vraiement pas un expert en php mais bon là ca devrait le faire!!
                              Mais attention tu dois avoir imperativement un autre id dans ta table, que customers_id, qui lui s'incremente normalement car sinon ca ne marchera pas!!
                              Je reste persuadé aussi que la fonction stockée dans la db est une meilleur solution...mais c'est toi qui choisit!!
                              @+
                              1. mille fois merci pour ton aide ça a bien marché ta solution je t'en suis tellement reconnaissante
                                t'es le meilleur !!!
                            2. Heu je dis peut etre une connerie, mais la fonction modulo existe en SQL (%) , pourquoi ne pas l'utiliser ?

                              si j'ai bien compris ce que tu voulais faire, en une ligne ca doit pouvoir le faire ...
                              1. mysql_query("INSERT INTO customers SELECT count(*)%250+1
                                ,'','$prenom','$nom','$datnais','$email','$adresse','$tel','$fax','".tep_encrypt_password($password)."','','','$D' FROM customers ")or die ('Erreur SQL !'.mysql_error());

                                ou quelquechose comme ca (j'ai testé sur mon serveur ca marche bien après je sais pas si ca répond bien à ta demande)
                                1. je ne sais pas comment te remercier tu me sauves la vie!!! mille merci ça a bien marché je te suis très reconnaissante pour ton aide t'es le meilleurs je te remercie infiniment