[SQL] pb mise à jour d'une colonne

Paulo69 Messages postés 8 Statut Membre -  
Paulo69 Messages postés 8 Statut Membre -
Bonjour,

Je n'arriva pas ecrire l'ordre SQL pour faire la mise à jour suivante :
dans une table article, j'ai une colonne ref_article et une colonne prix_article

Dans la colonne ref_article j'ai des article avec le prix associé chargé depuis un csv.

Pour certains articles avec des codes nuances, par exemple des pots de peinture de couleurs différentes, j'ai une ref_article de la famille ex: BAD01 avec des ref_article différentes pour chaque nuance ex BAD01A = blanc, BAD01F = noir, BAD01T = rouge, ... avec un prix à NULL car non disponible au chargement alors qu'il est égal au prix disponible de la famille BAD01.

Comment ecrire l'ordre SQL de mise à jour :
UPDATE article
SET prix_article des BAD01x = prix_article du BAD01

merci pour votre aide
Paul

5 réponses

  1. Michael_Ange Messages postés 231 Statut Membre 19
     
    salut paulo. y'a une chose ke je e compren pas bien dans ton message.
    Comment est ce que s'effectue le chargement de tes prix (avec un peu plus de détail STP).
    pour la mise à jour de tes colonnes, t'as qu'a essayé :
    UPDATE article
    SET prix_article = prix_réell where ref_article = BAD01x
    0
  2. Paulo69 Messages postés 8 Statut Membre 1
     
    Merci Michel Ange pour ta réponse.

    je te donne la structure de ma table et l'objectif de l'update

       --
        -- Structure de la table `easy_pop`
        -- 
    
        CREATE TABLE `EASY_POP` (
          `EAP_ID`           INT(10) UNSIGNED NOT NULL DEFAULT '0' ,
          `V_PRODUCTS_MODEL` VARCHAR(12) NOT NULL DEFAULT '' ,
          `V_PRODUCTS_PRICE` DECIMAL(15,4) DEFAULT '0.0000' ,
          PRIMARY KEY( `EAP_ID` ),
          UNIQUE KEY `V_PRODUCTS_MODEL`( `V_PRODUCTS_MODEL` ))
        ENGINE = MYISAM
        DEFAULT CHARSET = LATIN1;
        -- 
        -- Contenu de la table `easy_pop`
        -- 
    
        INSERT INTO `EASY_POP` VALUES     (10,'AAA05047',12.0000);
    
        INSERT INTO `EASY_POP` VALUES     (11,'AAA05047A',NULL);
    
        INSERT INTO `EASY_POP` VALUES     (12,'AAA05047B',NULL);
    
        INSERT INTO `EASY_POP` VALUES     (14,'AAA10012',16.2000);
    
        INSERT INTO `EASY_POP` VALUES     (15,'AAA10012A',NULL); 


    Ce qui me donne :

        Code Art      Prix
        10 - AAA05047  - 12.0000
        11 - AAA05047A - NULL
        12 - AAA05047B - NULL
        14 - AAA10012  - 16.2000
        15 - AAA10012A - NULL


    et je souhaiterai faire l'update pour avoir :

       10 - AAA05047   - 12.0000
        11 - AAA05047A  - 12.000
        12 - AAA05047B  - 12.000
        14 - AAA10012   - 16.2000
        15 - AAA10012A  - 16.200


    Merci pour votre aide
    Paul

    MySQL 4.1.9
    0
  3. Michael_Ange Messages postés 231 Statut Membre 19
     
    ce que j'aimerais savoir, c'est est ce que la récup des prix se fait depuis une table?
    Si oui, envoie la structure de cette table.
    dans le cas contraire, je suppose que les différents prix viennent de toi.
    dans ce cas tu seras obligé de modifier la colonne un peu comme je l'ai expliqué précédemment!!!
    0
  4. Paulo69 Messages postés 8 Statut Membre 1
     
    Bonjour Mickael_Ange,

    Les données viennent de fichier csv.
    Un fichier des articles avec tous les codes articles et un fichier tarif avec uniquement les tarifs des articles de base d'ou le NULL pour le prix des articles avec nuances !!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Paulo69 Messages postés 8 Statut Membre 1
     
    Ordres Update résolvant le pb :

    UPDATE `easy_pop` as e1 join `easy_pop` as e2
      SET  E1.V_PRODUCTS_PRICE = E2.V_PRODUCTS_PRICE
    WHERE SUBSTR(e1.v_products_model, 1, 8)=SUBSTR(e2.v_products_model, 1, 8)
    AND e2.V_PRODUCTS_PRICE IS NOT NULL]


    ou

    UPDATE `easy_pop` as e1 join `easy_pop` as e2
    SET  E1.V_PRODUCTS_PRICE = E2.V_PRODUCTS_PRICE
    WHERE SUBSTR(e1.v_products_model, 1, 8)=SUBSTR(e2.v_products_model, 1, 8)
    AND e2.V_PRODUCTS_PRICE IS NOT NULL
    AND e2.eap_id != e1.eap_id


    ou encore

    UPDATE `easy_pop` as e1 join `easy_pop` as e2
    ON SUBSTR(e1.v_products_model, 1, 8)=SUBSTR(e2.v_products_model, 1, 8)
    AND e2.V_PRODUCTS_PRICE IS NOT NULL
    AND e2.eap_id != e1.eap_id
    SET  E1.V_PRODUCTS_PRICE = E2.V_PRODUCTS_PRICE


    Have Fun
    0