Mise a jour TABLE [Résolu]

Mise a jour TABLE Mise à jour table des matières - titre qui remonte (Résolu) » Forum - Word TM1 par défaut mise à jour table des matières (Résolu) » Forum - Word Formulaire access et mise à jour table (Résolu) » Forum - Access ACCESS 2010 ZDL liée a ZDT et mise à jour table (Résolu) » Forum - Access VBA Mise à jour table depuis autre formulaire (Résolu) » Forum - Bureautique

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




Forum

Mise a jour TABLE Mise à jour table des matières - titre qui remonte (Résolu) » Forum - Word TM1 par défaut mise à jour table des matières (Résolu) » Forum - Word Formulaire access et mise à jour table (Résolu) » Forum - Access ACCESS 2010 ZDL liée a ZDT et mise à jour table (Résolu) » Forum - Access VBA Mise à jour table depuis autre formulaire (Résolu) » Forum - Bureautique

Web: www.shapebootstrap.net

29 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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.

Reply
réponses:
  • auteur

  • speedy_souris

    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 ?

  • jee pee

    Quelle est la description des 3 tables.

    Et l'id_catégorie il est présent dans la table produit ?

  • speedy_souris

    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)

  • jee pee

    Et l'id_catégorie il est présent dans la table produit ?

  • speedy_souris

    non, c'est pour cela que j'ai la troisieme table qui contient les deux id

  • jee pee

    Mais d'où vient l'info pour l'association d'un produit à une catégorie ?

    Ce n'est pas l'informatique qui va la sortir de son chapeau.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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 ?


Reply
réponses:
  • speedy_souris

    voila ce qui m'est imposer

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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 ?

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

 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

Reply
réponses:
  • jee pee

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

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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 ?

Reply
réponses:
  • auteur

  • jordane45

    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.

  • speedy_souris

    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

  • jordane45

    Essayons 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 !!!

  • jee pee

    Comment, 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

  • speedy_souris

    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

  • jordane45

    Si la base de données existe déjà... tu dois pouvoir trouver l'information quelque-part non ?
    Comme le dit jeepee.. regarde dans le JSON si elles n'y sont pas.....
    et donc, lors de l'import de ton JSON tu dois pouvoir remplir les différentes tables dont tu as besoin à partir de ces données.

  • jee pee

    tu vas trop vite ;-)

    tu ne lis pas tout et ne réponds pas aux questions : Comment, avec quoi, as-tu rempli produits et catégories ?

  • speedy_souris

    menu category:

    choix = [         ['Boissons_energetiques', 'boissons_energie.json'], [             'Bonbons', 'bonbons.json'],         ['Charcuteries', 'charcuteries.json'], ['Chocolats', 'chocolats.json'],         ['Conserves', 'conserves.json'], ['Fromages', 'fromages.json'],         ['Fruits', 'fruits.json'], ['Fruits_confits', 'fruits_confits.json'],         ['Gateaux', 'gateaux.json'], ['Glaces', 'glaces.json'],         ['Jus_de_fruits', 'jus_fruits.json'], ['Laits', 'laits.json'],         ['Pates_de_fruit', 'pate_fruits.json'], ['Pates', 'pates.json'],         ['Pates_a_tartiner', 'pates_tartiner.json'], ['Pizzas', 'pizzas.json'],         ['Poissons', 'poissons.json'], ['Poissons_elevages',                                         'poissons_elevage.json'],         ['Reglisse', 'reglisses.json'], ['Riz', 'riz.json'],         ['Sorbets', 'sorbets.json'], ['Viandes', 'viandes.json'],         ['Vins', 'vins.json'], ['Yaourts', 'yaourts.json']     ]      for i, elt in enumerate(choix):         insert.contained_database('json/' + choix[i][1], choix[i][0], i)         print("{}. {}".format(i+1, elt[0]))

    Insertion categories et produit:
    def contained_database(data, name_category, nb_product):      # --------------------     # | Opening DataBase |     # --------------------      database = mysql.connector.connect(         host="localhost",         user="student",         password="OpenClassRooms",          database="food_product"     )      cursor = database.cursor()      #     # category data and database filling     #      sql_c = "INSERT INTO category(category) VALUES (%s)"     val_c = (name_category,)      cursor.execute(sql_c, val_c)      database.commit()  # category inserted      #     # read data from the json file     #      designation = ''      with open(data) as json_category:         category_dict = json.load(json_category)      while nb_product <= category_dict['page_size']:         try:              #             # product data and database filling             #              sql_p = """INSERT INTO product(                 url,                 nutrition_grade,                 description,                 name,                 store)                      VALUES (%s, %s, %s, %s, %s)"""              val_p = (                 category_dict['products'][nb_product]['url'],                 category_dict['products'][nb_product]['nutrition_grade_fr'],                 category_dict['products'][nb_product]['generic_name_fr'],                 category_dict['products'][nb_product]['product_name'],                 category_dict['products'][nb_product]['stores']             )              cursor.execute (sql_p, val_p)             database.commit()  # data inserted          except IndexError:             pass         except KeyError:             pass          nb_product += 1      database.close()  # closing database


    j'en suis à remplir la table category_product

    voici un exemple de fichier JSON :
    https://fr.openfoodfacts.org/category/pizzas.json

    avec ca est ce que ca répond aux questions
    https://github.com/speedy-souris/avantage.git

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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 ?



Reply
réponses:
  • speedy_souris

    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

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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 ?

Reply
réponses:
  • speedy_souris

    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é

  • jee pee

    A l'occasion renseigne toi sur le chargement des données de substitution.

    Et tu pourrais regarder ce projet, il travaille sur les mêmes données que toi, même si au départ le chargement s'effectue depuis un .csv : https://github.com/jfsubrini/project5_off_converter

  • jordane45

    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

  • jee pee

    C'est effectivement meilleur.

  • speedy_souris

    merci a tous pour aide

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed