Update et Select, pas en même temps, mais ça serait bien

Leorilan
Invité n'ayant pas de compte PHPfrance

14 sept. 2006, 17:49

Bonjour,

Je met en place un système de création de numéro client.
J'ai une table de l aforme suivante :

Code : Tout sélectionner

`id` bigint(20) NOT NULL auto_increment, `code` char(1) NOT NULL default '', `numero_increment` bigint(20) NOT NULL default '0',
le champ code me permet de différencier les provenances.
le numero_increment s'incremente de 1 à chaque création
la concaténation des 2 me donne un numéro de client à attribuer.


Pour eviter des soucis de table qui gonfle à vue d'oeil, j'aimerais éviter de multiplier les lignes. autrement dit de créer un enregistrements par numero_client créé.

J'ai donc pensé à la solution suivante :
Etape 1 : update de la table => numero_increment = numero_increment +1
Etape 2 : select sur la table => MAX(numero_increment)
Etape 3 : j'attribue la valeur à un client.

Ma crainte est la suivante :
si plusieurs utilisateurs crééent un client en même temps, je risque d'avoir plusieurs clients avec le même numéro, génant.
L'utilisateur 1 qui fait une demande de création et en est à la fin de l'étape 1.
L'utilisateur 2 fait une demande de création à ce moment là.
Les clients des 2 utilisateurs auront le même numéro puisque l'update de l'étape 2 n'a pas encore eu lieu.

Ma question est donc la suivante :

Est il possible de récupérer la valeur d'un champ modifié par un update sans passer par un select ?

La question semble idiote, si je fais un update classique "update ma_table set mon_champ = 'toto'". Je connais la valeur de 'toto', donc inutile.
Mais dans mon cas je ne connais pas la valeur de numero_increment.

Si je fais un select avant de faire un update, la même problématique se pose.

Petite précision :
J'utilise MySql 4.
Je ne peux pas vérouiller les tables.

Si quelqu'un a une idée je suis preneur.

Merci de m'avoir lu.

Jean-Seb
Invité n'ayant pas de compte PHPfrance

25 sept. 2006, 21:39

Bonjour,

regarde du côté de lastinsertid(); c'est une fonction prédéfinie.

jean-sébastien
Invité n'ayant pas de compte PHPfrance

25 sept. 2006, 21:42

la fonction qu j'utilise est une fonction php :
mysql_insert_id()
cette fonction retourne la dernière valeur créée sur une colone autoincrement pour la session.

souhaitant t'avoir aidé

mail : soizic.jeanseb(chez)free.fr