Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2007, 11h06   #1
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
Par défaut [mysql 5.0] insert en fonction de la valeur d une colonne

Slt. a tous.

ce que je voudrais savoir, c´est s´il existe quelque chose du genre:

Ma_table
(ID_MA_table,tdoc,ndoc,nom)

Code :
1
2
3
insert into Ma_table (tdoc,ndoc,nom) values 
(2,select max(ndoc)+1 from Ma_table where tdoc=2,"XXX")
je m´exlique:
je voudrais que ndoc soit un compteur de document, en funtion du tdoc( type du doc)
1 | 2 | 1 | XXXX
2 | 2 | 2 | YYY
3 | 1 | 1 | hhh

pour l´instant j´ai:

Code :
1
2
3
4
5
6
7
 
start transaction;
LOCK TABLE Ma_table WRITE;
SELECT @A:=max(codigo)+1 FROM MA_table WHERE tdoc =2;
INSERT INTO Ma_table (tdoc,ndoc,nom) VALUES (2,@A,"XXX");
UNLOCK TABLES;
commit;
mais je trouve qu´il doit avoir plus facile, vue que ce probleme doit arriver a
presque tous le monde... si quelqun me peut donner des idees...
merci...
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 11h24   #2
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
bonjour,

essaie ceci :
Code :
1
2
INSERT INTO Ma_table (tdoc,ndoc,nom) 
SELECT "2", max(ndoc)+1,"XXX" FROM Ma_table WHERE tdoc=2
sinon,mettre un auto-increment sur ndoc, ca ne serait pas possible?
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 11h25   #3
Membre habitué
 
Homme Sébastien
Développeur informatique
Inscription : août 2003
Messages : 252
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : août 2003
Messages : 252
Points : 120
Points : 120
Code :
1
2
INSERT INTO Ma_table (tdoc,ndoc,nom)
VALUES ('2', IF(tdoc='2', MAX(ndoc)+1, NULL), 'XXX');
Essaye ca mais je ne garantis pas que ca fonctionne.
smarties est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 11h56   #4
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
slt.


smarties... ca me sort un "ilegal use of group function".


cybher...
pour auto-increment... non. il est deja sur ID_MA_table.
ndoc, est un "auto-increment", mais en fonction du tdoc.

pour ta requete, elle marche....

Mais l´explain sur elle, par contre non...

avec ta requette, est-il necessaire de faire un lock table ?
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 13h48   #5
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
a mon avis, il faut mieux la 'locker'
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 17h14   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
si tu veux éviter de locker ta table : tu crées une table compteur pour chaque tdoc, avec comme seule colonne un auto_increment.
Avant chaque INSERT dans Ma_table avec un tdoc = 2, tu fais :

Code :
INSERT INTO compteur2 VALUES (DEFAULT) ;
Ensuite, dans Ma_table, tu fais ton insertion avec LAST_INSERT_ID() :

Code :
1
2
INSERT INTO Ma_table (tdoc, ndoc, nom)
VALUES (2, LAST_INSERT_ID(), NULL), 'XXX');
Evidemment, tu as intérêt à mettre tout ça dans une proc stock ou un trigger.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 10h15   #7
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
slt.


merci pour vos reponses...
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h23.


 
 
 
 
Partenaires

Hébergement Web