Menu

Mise a jour TABLE [Résolu]

speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 09:42 - Dernière réponse : speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention
- 12 oct. 2018 à 21:29
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




Afficher la suite 

Votre réponse

29 réponses

jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention - Modifié par jee pee le 12/10/2018 à 10:12
0
Merci
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.

jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention > speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 11:52
Quelle est la description des 3 tables.

Et l'id_catégorie il est présent dans la table produit ?
speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 12:29
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 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention > speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 12:38
Et l'id_catégorie il est présent dans la table produit ?
speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 12:50
non, c'est pour cela que j'ai la troisieme table qui contient les deux id
jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention > speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 13:16
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.
Commenter la réponse de jee pee
jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention - Modifié par jee pee le 12/10/2018 à 12:12
0
Merci
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 ?


speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 14:00
voila ce qui m'est imposer
Commenter la réponse de jee pee
jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 14:34
0
Merci
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 ?
Commenter la réponse de jee pee
speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 14:35
0
Merci
 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
jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 14:42
É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.
Commenter la réponse de speedy_souris
speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 15:48
0
Merci
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 ?

jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention > speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 16:35
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 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 16:45
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 22774 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention > speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 16:50
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 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention > speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 16:56
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 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 17:20
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
Commenter la réponse de speedy_souris
jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention - Modifié par jee pee le 12/10/2018 à 18:03
0
Merci
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 ?



speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 18:54
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
Commenter la réponse de jee pee
jee pee 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 19:14
0
Merci
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 ?
speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 19:37
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 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention > speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 20:15
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 22774 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 20:06
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 23151 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention > jordane45 22774 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 20:12
C'est effectivement meilleur.
speedy_souris 43 Messages postés samedi 4 janvier 2014Date d'inscription 12 octobre 2018 Dernière intervention - 12 oct. 2018 à 21:29
merci a tous pour aide
Commenter la réponse de jee pee