Incrémentation d'un champs par tranche

Résolu
tima -  
 tima -
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. chuka Messages postés 980 Statut Membre 379
     
    Salut,
    CREATE SEQUENCE MA_SEQU INCREMENT BY 1 MINVALUE 1 MAXVALUE 250 CACHE 249 CYCLE NOORDER;
    Si tu es sur oracle...
    @+
    0
  2. chuka Messages postés 980 Statut Membre 379
     
    --
    Sur un malentendu, ca peut marcher!!
    0
  3. tima
     
    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
    0
  4. Zep3k!GnO Messages postés 2049 Statut Membre 200
     
    Tu veux que ce soit automatique dans la BDD la remise à 0 de l'auto incremente pour une table donnée c'est ça ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tima
     
    bonjour,
    Oui ça peut être une solution est ce que tu sais comment faire?
    merci
    0
  7. chuka Messages postés 980 Statut Membre 379
     
    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!!
    @+
    0
    1. tima
       
      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
      0
  8. tima
     
    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?
    0
  9. chuka Messages postés 980 Statut Membre 379
     
    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());
    @+
    0
  10. tima
     
    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
    0
  11. chuka Messages postés 980 Statut Membre 379
     
    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....
    @+
    0
  12. tima
     
    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??
    0
  13. chuka Messages postés 980 Statut Membre 379
     
    Ben c'est une fonction Mysql!!
    que tu pourras utiliser avec un script php... quel est le probleme?
    0
  14. tima
     
    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
    0
  15. chuka Messages postés 980 Statut Membre 379
     
    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??
    0
  16. tima
     
    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
    0
  17. chuka Messages postés 980 Statut Membre 379
     
    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!!
    @+
    0
    1. tima
       
      mille fois merci pour ton aide ça a bien marché ta solution je t'en suis tellement reconnaissante
      t'es le meilleur !!!
      0
  18. jeangilles Messages postés 816 Date d'inscription   Statut Membre Dernière intervention   186
     
    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 ...
    0
  19. jeangilles Messages postés 816 Date d'inscription   Statut Membre Dernière intervention   186
     
    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)
    0
  20. tima
     
    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
    0