Incrémentation d'un champs par tranche

Résolu/Fermé
tima - 13 juil. 2009 à 14:34
 tima - 16 juil. 2009 à 21:30
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?

19 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
13 juil. 2009 à 14:56
Salut,
CREATE SEQUENCE MA_SEQU INCREMENT BY 1 MINVALUE 1 MAXVALUE 250 CACHE 249 CYCLE NOORDER;
Si tu es sur oracle...
@+
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
13 juil. 2009 à 15:07
--
Sur un malentendu, ca peut marcher!!
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
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
13 juil. 2009 à 16:15
Tu veux que ce soit automatique dans la BDD la remise à 0 de l'auto incremente pour une table donnée c'est ça ?

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonjour,
Oui ça peut être une solution est ce que tu sais comment faire?
merci
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
13 juil. 2009 à 21:11
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!!
@+
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
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?
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
16 juil. 2009 à 15:49
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());
@+
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
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
16 juil. 2009 à 16:03
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....
@+
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??
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
16 juil. 2009 à 16:36
Ben c'est une fonction Mysql!!
que tu pourras utiliser avec un script php... quel est le probleme?
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
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
16 juil. 2009 à 18:42
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??
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
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
16 juil. 2009 à 20:15
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!!
@+
mille fois merci pour ton aide ça a bien marché ta solution je t'en suis tellement reconnaissante
t'es le meilleur !!!
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
16 juil. 2009 à 20:24
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 ...
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
16 juil. 2009 à 20:53
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)
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