Mise a jour TABLE

Résolu/Fermé
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019 - 12 oct. 2018 à 09:42
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019 - 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




A voir également:

7 réponses

jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
Modifié le 12 oct. 2018 à 10:12
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.

0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
Modifié le 12 oct. 2018 à 12:01
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 ?
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235 > speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
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 ?
0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
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)
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235 > speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
12 oct. 2018 à 12:38
Et l'id_catégorie il est présent dans la table produit ?
0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
12 oct. 2018 à 12:50
non, c'est pour cela que j'ai la troisieme table qui contient les deux id
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
Modifié le 12 oct. 2018 à 12:12
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 ?


0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
12 oct. 2018 à 14:00
voila ce qui m'est imposer
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
12 oct. 2018 à 14:34
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 ?
0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
12 oct. 2018 à 14:35
 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
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
Modifié le 12 oct. 2018 à 14:43
É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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
12 oct. 2018 à 15:48
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 ?

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 oct. 2018 à 15:51
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.

0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
Modifié le 12 oct. 2018 à 16:22
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
12 oct. 2018 à 16:22
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 !!!
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235 > speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
Modifié le 12 oct. 2018 à 16:38
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
0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
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
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
Modifié le 12 oct. 2018 à 18:03
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 ?



0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
Modifié le 12 oct. 2018 à 19:06
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
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
12 oct. 2018 à 19:14
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 ?
0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
Modifié le 12 oct. 2018 à 20:22
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é
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235 > speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
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
0
jee pee Messages postés 39637 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
12 oct. 2018 à 20:12
C'est effectivement meilleur.
0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
12 oct. 2018 à 21:29
merci a tous pour aide
0