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

Requêtes MySQL Discussion :

automatiser création grand nombre ligne


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut automatiser création grand nombre ligne
    Bonjour,

    Je suis en train de mettre en place une boutique en ligne. Je dois "relier" les déclinaisons (taille, conditionnement,...) au produit concerné.

    Je dois donc ajouter 5 lignes pour un même produit. Le code sql est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO `grimaud_2`.`jos_vm_product_attribute` 
    (`product_id`, `attribute_name`, `attribute_value`) 
    VALUES ('893', 'product_list', 'YM'), ('893', 'product_list_child', ''), ('893', 'vm_list_header', 'Y'), 
    ('893', 'vm_quantity_box', 'normal,0,0,1'), ('893', 'vm_use_parent', 'N')
    Pour compliquer la chose, je ne connais pas directement le product_id (ici 893). En revanche, je connais, dans une autre table, un champ qui permet de déterminer ce product_id. Le code pour connaitre la correspondance est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT `product_id` , `product_sku`
    FROM `jos_vm_product`
    WHERE `product_sku` = "FT4"
    Ainsi, je dispose de la référence FT4; la seconde requette me permet de connaitre le product_id. Ensuite, je dois créer 5 lignes par le biais de la 1ere requete.

    PS, sur la 1ere requete, le contenu de attribute_name et attribute_value ne change jamais

    Mon problème est que j'ai plus de 1.000 produits à convertir ainsi.... faire la manip à la main n'est pas imaginable.... sauriez vous comment automatiser cela??

    Merci d'avance

  2. #2
    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 : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Si je résume, pour chaque produit (ou pour chaque produit en FT4 ?), tu veux créer 5 attributs identiques ?

    Commence par créer une table contenant ces 5 attributs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create table Attr5(attribute_name varchar(30), attribute_value varchar(30)) ;
     
    insert into Attr5
    Values
    ('product_list', 'YM'),
    ('product_list_child', ''), 
    ('vm_list_header', 'Y'), 
    ('vm_quantity_box', 'normal,0,0,1'),
    ('vm_use_parent', 'N') ;
    Ensuite, tu n'as plus qu'à faire un INSERT... SELECT avec un produit cartésien entre jos_vm_product et Attr5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO `grimaud_2`.`jos_vm_product_attribute` 
    (`product_id`, `attribute_name`, `attribute_value`)
    SELECT P.product_id, A.attribute_name, A.attribute_value
    FROM jos_vm_product P CROSS JOIN Attr5 A
    -- si tu veux limiter aux produits en FT4
    WHERE P.product_sku = 'FT4' ;
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    merci pour ta réponse mais je me suis peut etre mal exprimé : je n'ai pas besoin de créer de table car les produits et les attributs sont déja créés : je n'ai plus qu'à indiquer au produit qu'un (ou des) attribut existe.

    POur ce faire, il me faut juste créer dans la table 'jos_vm_product_attribute' une série de 5 enregistrements. Ces éléments sont toujours les memes quelquesoit le produit hormis le 'product_id' qui est la clé primaire de la table 'jos_vm_product'.

    Pour identifier le product_id, je lance la seconde requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT `product_id` , `product_sku` 
    FROM `jos_vm_product` WHERE `product_sku` = "FT4"
    Dis moi si ca n'est pas encore asez clair, j'essaierai d'être plus clair encore.

    EN tout cas un grand merci car ce problème est véritablement bloquant pour moi

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    PS, FT4 est la réference du produit de l'exemple (product_sku qui se trouve dans jos_vm_product)

    893 est la clé primaire qui désigne le référence ci dessus (product_id présent dans les deux tables : jos_vm_product et jos_vm_product_attribute)

    La clé primaire (893 - product_id) est génerée automatiquement lorsque je créé un produit. Mes produits disposent d'une référence (FT4 - product_sku)

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    peut etre qu'un schéma sera plus simple pour comprendre :

    voici la table jos_vm_product ou j'ai en ma possession les product_sku pour lesquels il faut agir ensuite. Il s'agit d'identifier le product_id correspondant.


    Ensuite, pour le product_id que l'on déterminé à l'étape précédente, il faut ajouter les enregistrements suivants sur la table jos_vm_product_attribute :


    La table jos_vm_product_attribute est ainsi :


    J'espère que je me suis mieux exprimé ainsi

  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 : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    je sais que tu n'as pas besoin de Attr5 dans ton modèle de données. Cette table n'est qu'un moyen d'obtenir ce que tu veux (tes 5 attributs répétés produit par produit). Tu pourras ensuite la supprimer.
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    ah génial ca marche !!! merci beaucoup!!

    Par contre, je dois faire la manip pour des centaines d'articles. Je pourais rajouter sur le code sql dans WHERE des OR P.product_sku='xx' et les répeter autant e fois que nécéssaire....

    J'ai pensé à mettre une variable à la place de xx mais l'on ne peut remplacer xx par plusieures references distinctes....

    As tu un racourci à me proposer?

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    pour info, les références sont présentes en colone sur excel

  9. #9
    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 : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Si c'est pour tous les articles de la table, il suffit de ne pas mettre de clause WHERE (mais ça voudrait dire que ton modèle de données est mal foutu).

    Si tu dois choisir une centaine d'articles un par un, le + simple est peut-être d'ajouter un flag (autrement dit une colonne TINIYINT(1) NOT NULL DEFAULT 0) à ta table des produits, ce qui te permet dans la requête de mettre une condition WHERE flag_creer5attrib = 1.

    Enfin, tu auras peut-être besoin de faire tourner ta requête plusieurs fois (on ne fait jamais tout bien du premier coup). Tu as donc intérêt à mettre une clé unique sur jos_vm_product_attribute (product_id, attribute_name, attribute_value) et à utiliser REPLACE INTO au lieu de INSERT INTO.
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    En effet, je dois choisir les produits, il faudrait donc que j'utilise le flag.

    Par contre désolé mais je ne suis pas expert en mysql... si j'ai bien compris, je rajoute un champ sur la table produit avec par default la valeur 0 et lorsque je veux selectionner la valeur sur laquelle je dois appliquer la requete que tu m'as précedement expliqué, je dois mettre la valeur 1.

    Ensuite dans la claude where, on indique que pour tous les elements = à 1, on applique la requete...

    Ais je bien compris?

    merci encore

  11. #11
    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 : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    yes.

    Si tu as les références dans Excel, tu peux aussi utiliser des formules Excel pour te générer une liste que tu peux utiliser ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    WHERE product_sku IN ('FT4', 'XY5', 'AB6', ...)
    tu peux utiliser ce WHERE pour mettre à 1 le flag, ou bien laisser tomber complètement cette histoire de flag et l'utiliser directement dans ton INSERT INTO ou REPLACE INTO.
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    INCROYABLE, c'est vraiment parfait, je vais utiliser le IN - c'est supra simple pour moi maintenant!!!!

    Une derniere question, quel est le nombre maximal de references que je peux mettre dans le IN?

  13. #13
    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 : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Citation Envoyé par grimat
    Une derniere question, quel est le nombre maximal de references que je peux mettre dans le IN?
    La doc ne mentionne pas de limite...
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    OK, un grand merci pour la qualité, la pertinence et la rapidité de tes réponses. Bon courage à toi pour la suite, bonnes vacances si tu as la chance d'en prendre

  15. #15
    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 : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Citation Envoyé par grimat
    OK, un grand merci pour la qualité, la pertinence et la rapidité de tes réponses. Bon courage à toi pour la suite, bonnes vacances si tu as la chance d'en prendre
    J'ai effectivement cette chance ; quand je bosse, mes réponses sont + concises et pourtant moins rapides
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

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

Discussions similaires

  1. [2000] Meilleure méthode pour insérer un grand nombre de lignes
    Par nicodev24 dans le forum Développement
    Réponses: 11
    Dernier message: 31/10/2016, 11h25
  2. [BO XI R2] Création d'un très grand nombre d'utilisateurs
    Par iuchiban dans le forum Administration-Migration
    Réponses: 14
    Dernier message: 04/02/2008, 15h36
  3. Macro Solver pour un grand nombre de ligne
    Par hochimi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/07/2007, 23h20
  4. Réponses: 4
    Dernier message: 03/02/2007, 21h27
  5. vue récupérant un grand nombre de lignes
    Par pointe dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/12/2006, 19h29

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