+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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 Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 769
    Points : 1 379
    Points
    1 379

    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 :
    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 :
    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.

  3. #3
    Invité de passage
    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 : 0
    Points
    0

    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
    Invité de passage
    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 : 0
    Points
    0

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •