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 :

Insérer dans une table une valeur extraite de cette même table + des valeurs ajoutées manuellement


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Insérer dans une table une valeur extraite de cette même table + des valeurs ajoutées manuellement
    Bonsoir,

    J'aimerais quelques pistes pour avancer sur un casse tête qui me tient à cœur. Je cherche à ajouter dans une table de nouvelles valeurs, mais seulement dans certaines conditions, dans l'optique de la réorganisation d'une base de donnée de spécifications techniques.

    La table en question, nommée fiche_champs, fais le lien entre les critères techniques et les fiches produits en question. Elle comprends les colonnes suivantes : id (id de la relation), id_fiche (id de la fiche produit), id_champs (id d'un critère, correspondant par exemple à "Poids"), id_champs_value (id de la valeur de ce critère, correspondant par exemple à "5 Kg"), string_valeur (intitulé textuel de la valeur : 5-KG), num_valeur (valeur numérique attribuée permettant une recherche avec des opérateurs logiques, par exemple "5")

    Je cherche donc à ajouter de nouvelles relations à cette base.
    Par exemple, je vais créer un nouveau champ intitulé "catégorie de poids" et une valeur pour ce même champs intitulée "Lourd".

    Je vais donc chercher à isoler toutes les entrée de cette table contenant l'"id_champs_value" correspondant à 5 Kg, récupérer les données, et ajouter une nouvelle relation entre les fiches concernées et ma nouvelle valeur Lourd.

    (Déjà, est-ce que ma démarche vous semble correcte ?)

    Je calle donc maintenant sur la structure de ma requête. Voici où j'en suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO fiche_champs (id_fiche, id_champs, id_champs_value, string_valeur, num_valeur)
     
    VALUES ( (SELECT id_fiche
     
    FROM fiche_champs
     
    WHERE id_champs_value=2027;) , 225, 2030, 'LOURD', 5);
    Mon SELECT imbriqué dans le VALUES n'est pas correct, mais c'est la "meilleure" manière que j'ai trouvé pour modéliser mon but.

    D'après vous, est-ce la bonne approche ?

    Edit : modification du titre pour mieux refléter ma demande +
    correction de mon erreur de parenthèse

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    peut tu préciser d'ou vienne tes données , déjà en base, fichier XML, fichier SQL, ...

    Si tes données sont déjà stocké en BDD tu peut utiliser une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO fiche_champs(id_fiche, id_champs, id_champs_value, string_valeur, num_valeur)
    SELECT ... FROM ... WHERE ...;
    Tu pourra alors insérer dans ta table ficher_champs les données récupérés avec ta requête SELECT,

    la ou cela devient intéressant c'est que tu peut soumettre la valeur de la colonne categorie_de_poid à une condition avec l'opérateur WHEN ou IF du SQL,

    elles te permettront si la valeur de num_valeur est supérieur à 50 alors categorie_de_poid vaudra lourd, etc.

    Donc en une seul requête tu pourra traiter toutes les données de tes différentes tables.

    Seulement si ces données sont déjà stockées en BDD ^^

    EDIT : Ta requête est syntaxiquement fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO fiche_champs (id_fiche, id_champs, id_champs_value, string_valeur, num_valeur)
    VALUES( ( SELECT id_fiche FROM fiche_champs WHERE id_champs_value=2027 ) , 225, 2030, 'LOURD', 5);
    Attention aux parenthèses tu avait fermé la parenthèse du VALUES avec celle du SELECT.
    une réponse vous a permis d'avancer ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Pour préciser le contexte, les modifications que je fais sont manuelles, à partir de PHPMyAdmin. Tout se passe dans la même table, fiche_champs

    Les données sont pour une partie déjà en base : id_fiche
    J'ajoute l'autre partie manuellement à ma requête: id_champs, id_champs_value, string_valeur, num_valeur

    En décomposant mon objectif, voici les étapes que j'identifie :

    J'aimerais récupérer la liste de toutes les fiches (id_fiche) ayant pour le critère X (id_champs) une valeur Y (id_champs_value).

    À partir de cette liste, je veux insérer de nouvelles entrées dans cette même table, sans devoir spécifier manuellement id_fiche.
    Une entrée doit être créée automatiquement pour chacune des fiches identifiées, en spécifiant moi-même l'association critère A (id_champs) et valeurs B (id_champs_value).


    Par contre je n'ai pas de colonne catégorie de poids, cela correspond dans mon cas à un critère (id_champ), et Lourd correspond à une valeur (id_champs_value).

    Ces critères et valeurs sont eux stockées dans une autre table, certainement pour pouvoir rendre leur modification plus simple via l'interface d'admin.
    La table fiche_champs sert juste de liaison entre l'ID d'une fiche, l'ID d'un critère et l'ID de la valeur de ce critère pour résumer.

    Merci beaucoup en tout cas, je n'avais pas repéré cette grossière erreur de parenthèse

  4. #4
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Comme j'ai l'impression que mon raisonnement n'est pas le bon, quelle serait votre approche pour arriver à l'objectif décrit ?

    Je ne cherche pas une requête toute pré-machée mais plutôt un raisonnement logique sur lequel me baser pour avancer

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/09/2014, 11h30
  2. Réponses: 2
    Dernier message: 11/08/2012, 10h28
  3. une requête avec 2 count sur la même table
    Par epeichette dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/06/2009, 09h19
  4. Réponses: 4
    Dernier message: 03/07/2008, 15h53
  5. Réponses: 0
    Dernier message: 06/02/2008, 17h09

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