IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

[mysql 5.0] insert en fonction de la valeur d une colonne


Sujet :

SQL Procédural MySQL

  1. #1
    Membre chevronné Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    bonjour,

    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 484
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Membre chevronné Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Par défaut
    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 ?

  5. #5
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    a mon avis, il faut mieux la 'locker'

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO compteur2 VALUES (DEFAULT) ;
    Ensuite, dans Ma_table, tu fais ton insertion avec LAST_INSERT_ID() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Membre chevronné Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Par défaut
    slt.


    merci pour vos reponses...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Colorer des lignes en fonction de la valeur d'une colonne
    Par antoninr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/01/2013, 13h33
  2. Générer un onglet en fonction de la valeur d'une colonne d'une liste
    Par kreutzberg dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/05/2012, 09h09
  3. [XL-2007] Fonction qui recherche valeur d'une colonne
    Par nicolaz18 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/04/2012, 17h51
  4. Réponses: 0
    Dernier message: 09/07/2011, 21h52
  5. Réponses: 2
    Dernier message: 03/02/2011, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo