Mise a jour TABLE

Résolu
Bonjour à toutes et tous,
dans une BD, j'ai la colonne id de la table1 que je veux mettre a jour avec la colonne id de la table2
j'ai cette requete
UPDATE TABLE1 SET id_TABLE1 = (SELECT id_TABLE2 FROM TABLE 2
)
la table 1 reste vide
si vous pouvez m'aiguiller, ou est mon erreur ?

merci



--
Cordialement,
pascal

7 réponses

Résumé de la discussion

La problématique centrale porte sur l'association de produits et catégories via des IDs issus de TABLE1 et TABLE2, et sur l'impossibilité apparente de mettre automatiquement à jour TABLE1 avec l'id de TABLE2. La solution clé consiste à utiliser une table d'association entre produit et catégorie et à la remplir manuellement, plutôt que d'essayer de copier des IDs entre tables sans correspondances préalables. Des explications techniques évoquent des méthodes comme LAST_INSERT_ID() pour récupérer les IDs nouvellement créés lors d'insertion, puis les associer après chaque ajout et éviter les erreurs de mapping entre les tables. En pratique, il faut préparer la structure des données: une table d'association avec produit_id et categorie_id, puis alimenter les paires correctement pour obtenir des résultats cohérents.

Bobot (l’IA à votre service)
  1. Modérateur
    Bonjour,

    Table1 contient quoi ? Si elle est vide ce n'est pas un
    update
    qu'il faut faire.

    Si elle contient quelque chose ta commande essaie de remplir une seule cellule avec toutes les valeurs contenues dans table2. Il faudrait ne ramener qu'une seule valeur, sur un critère. Tu devrais détailler ce que tu veux faire.

    1. Bonjour jee pee,

      j'ai une table produit,
      j'ai une table categorie,
      j'ai une table de liaison qui doit contenir l'id produit et l'id categorie (pour lier un produit a une categorie avec les id correspondant) elle est vide et c'est elle que je veux remplir

      j'ai penser à une insertion
      mais je ne sait pas s'il est possible de faire une jointure avec une insertion ?
    2. Modérateur
      @speedy_sourisQuelle est la description des 3 tables.

      Et l'id_catégorie il est présent dans la table produit ?
    3. la table produit contient id (INT) (Table1) (non vide)

      la table categorie contient id (INT) (Table2) (non vide)

      la table categorie_produit contient categorie_id (INT) , produit_id (INT) (Table3) (vide)
    4. Modérateur
      @speedy_sourisEt l'id_catégorie il est présent dans la table produit ?
    5. non, c'est pour cela que j'ai la troisieme table qui contient les deux id
  2. Modérateur
    j'ai penser à une insertion
    mais je ne sait pas s'il est possible de faire une jointure avec une insertion ?


    Oui tu auras

    INSERT INTO table3 (..,..) SELECT .., .. FROM table1, table2 
    WHERE table1.xx = table2.xx


    Mais si
    - id_catégorie est dans table produit, pas besoin de jointure,
    - et si id_catégorie est dans la table produit pourquoi créer une table liaison (c'est probablement une relation du mcd entre les 2 tables, qui devrait disparaitre par la dé-normalisation quand id_catégorie migre dans la table produit)
    - id_catégorie n'est pas dans la table produit comment on détermine la catégorie d'un produit ?

    1. voila ce qui m'est imposer
  3. Modérateur
    Donc le couple id_produi/id_catégorie est une donnée primaire, qui ne peut pas être trouvée par du sql. Il faut saisir ces informations.

    Comment sont initialisées/chargées les table catégories et produit ?
    1.  INSERT INTO Table3(Table3.categorie_id, Table3.produit_id)
      SELECT Table2.id, Table1.id FROM Table2, Table1
      WHERE Table1.id = table2.id


      cette requete donne la meme chose dans la colonne category_id et produit_id (25 pour les deux)
      or j'ai beaucoup plus de produits que de categories

      colonne categorie_id ~ 25
      colonne produit_id ~ 200
      1. Modérateur
        Évidemment
        Table1.id = table2.id
        tu compares des choux et des carottes. l'id du produit avec l'id de la catégorie, ce qui n'a aucun sens.

        bis repetita placent : Donc le couple id_produi/id_catégorie est une donnée primaire, qui ne peut pas être trouvée par du sql. Il faut saisir ces informations.
    2. Après avoir compris que les id des tables 1 et 2 n'était pas identique
       INSERT INTO Table3(Table3.categorie_id, Table3.produit_id)
      SELECT Table2.id, Table1.id FROM Table2, Table1
      WHERE Table1.id = table3.product_id AND Table2.id = Table3.category_id

      j'ai essayer cette requete maintenant :

      ERROR 1054 (42S22): Unknown column 'Table3.product_id' in 'where clause'

      je ne comprend pas pourquoi ?

      1. Modérateur
        Bonjour,

        Je ne suis pas certain que tu lises les réponses qui te sont données...

        Donc pour éviter à JeePee de le réécrire encode une fois, et en espérant que ça sera assez lisible pour toi

        le couple id_produi/id_catégorie est une donnée primaire, qui ne peut pas être trouvée par du sql. Il faut saisir ces informations.

      2. Débutant et en formation dans la programmation et les bases de données, je ne sait pas ce qu'est une donnée primaire,
        L'objectif qui m'est demander developper une application en python qui recupere des infos produit alimentaire
        au format JSON les insere dans la BD (API OPENFOOD FACT)
        demandez à l'utilisateur de choisir une categorie produit
        ensuite demandez à l'utilisateur de choisir un produit dans la categorie choisi
        et l'appli affiche un produit substituer avec un grade nutritionel plus bas ainsi que le magasin ou l'acheter
        alors si je ne peut lier un id produit à id categorie l'appli ne sert à rien (réussir exam de formation = echec)

        merci de m'avoir répondu
      3. Modérateur
        @speedy_sourisEssayons d'expliquer simplement...

        D'un côté tu as des produits
        De l'autre, des catégories

        Tu veux associer ces produits à des catégories........ mais cette association ne peut pas être faite en "automatique" (via une requête sql ).
        C'est à toi de remplir cette table d'association... à la main.
        Produit 1 : catégorie truc
        Produit 1 : catégorie bidule
        Produit 2 : catégorie machin
        etc....

        C'est justement cette table (que tu auras donc rempli à la main...) qui te permettra de faire l'association produit/catégorie )
        Tant que tu n'auras pas rempli cette table.... IMPOSSIBLE de savoir quel produit mettre avec quelle catégorie.

        Aucune requête ne peut remplir cette table automatiquement à ta place !!!
      4. Modérateur
        @speedy_sourisComment, avec quoi, as-tu rempli produits et catégories ?

        Pour moi quand je lis "developper une application en python qui recupere des infos produit alimentaire au format JSON les insere dans la BD (API OPENFOOD FACT) " c'est que les données que tu cherches sont dans le .json

        Pareil pour la table produit de substitution
      5. OK merci pour ces explication simplifier

        c'est la que ca poser soucis car 200 produits c'est pour tester mon appli
        OPENFOODFACT étant une base de données de produit alimentaires internantionale qui ne limite pas à une vintaine de categories produit ni à une centaine de produits

        remplir la table d'association à la main ???

        je vais voir pour construire cela differement
    3. Modérateur
      C'est pas clair ;-/

      Quand plus haut tu disais que tu avais 200 produits, c'est que tu n'as chargé qu'un fichier json correspondant à une catégorie, par exemple pizza ?

      Et qu'il faut les charger un par un pour chaque catégorie ?

      1. j'ai récupére 24 ou 25 categories (fichier json) par ordre alphabetique (chocolat, fromage, charcuterie, fruit....)
        dans la premiere partie(menu category)
        j'ai mis la categorie et le nom des 25 fichiers json dans une liste ligne 13 à 28

        la boucle for permet de parcourir la liste de l'ensemble des fichiers json

        a chaque tour de boucle j'apelle la fonction contained_database() ligne 31 de la partie 1 (menu category)
        qui insere la categorie des produit dans la table category ligne 29 à 34 de la partie 2(insertion category et produit)

        elle continu en inserant les données produits dans la table product ligne 40 à 76 de la partie 2(insertion category et produit)

        ensuite il affiche les category ce qui forme le menu du choix de categorrie (ligne 32 partie 1)

        Table category:


        Table product:


        maintenant ce que je veux arriver a faire c'est recuperer l'id de la table category et l'id de la table product et les lier avec la table category_product qui est vide
    4. Modérateur
      Tu pourrais rajouter, après le chargement de la table product une commande sql comme

      insert into category_product(category_id, product_id)
      select '16', product.id from product
      where product.id not in (select product_id from category_product)
      

      Le 16, à mettre en variable, doit correspondre à ton choix dans le menu de chargement et doit (à verifier) correspondre à l'id dans la table category.

      C'est toi qui a créé le modèle de la BDD, ou les 4 tables étaient imposées ?

      Car comme je l'ai écrit plus haut, le category_id dans la table product simplifierait le modèle. Il suffirait de mettre '16' dans le champ category_id lors du chargement de la table product.

      Et reste un autre chargement à faire : les produits de substitution. A partir de quoi les charger ?
      1. Concernant le modéle de la BDD c'est moi en partie qui l'a creer mais la 4 eme table substitution_product c'est mon mentor qui me la donnée (condition importante pour la soutenance du projet )

        Pour la partie substitution de produits, une chose après l'autre ....
        reste pas mal de chose a régler avant cette partie (menu produit selon le choix category, choix du produit...)

        maintenant, j'ai quelques notions à digérer pour bien appréhender la suite du script

        merci pour votre aide et votre patience

        .......

        aprés avoir tester la requete que tu as faite le 16 (choix de category) a mon idée ne devrait pas apparaitre dans la table category_product

        je m'explique

        exemple

        les produits 1 à 12 ont la category 8
        les produits 13 à 38 ont la category 2
        les produits 75 à 106 ont la category 16
        ...
        produit n à 159 ont la category 1

        le 16 intervient pour afficher les produit 75 à 106 (menu choix produit à substituer)

        ensuite affichage du produit substituer (grade nutritionel qui se rapproche de A)

        le classement des produits se font par un grade nutritionel qui part de A à E

        A excellent pour la santé
        E moins pour la santé
      2. Modérateur
        Bonsoir,

        Lorsque tu ajoutes une catégorie dans ta table, tu peux, en mysql, récupérer l'ID nouvelle créé.
        Pour cela il existe la fonction LAST_INSERT_ID()

        Et bien entendu.. Tu fais la même chose lors de l'insertion des produits.
        De cette façon.. tu as les deux id à insérer dans ta table d'association

        En gros :
        1 - Ajout catégorie dans la table category_product
        2 - Récupération de l' ID
        3 - Boucle sur les produits :
        3 - a ) : Ajout d'un produit dans la table product
        3 - b) : récupération de l'ID du produit
        3 - c ) : Insertion dans la table d'association des deux ID ..
        4 - d) produit suivante.. puis reprendre à partir du 3-a
      3. merci a tous pour aide