Requête SQL avec 2 tables différentes

Fermé
Taloo - 21 nov. 2011 à 12:42
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 22 nov. 2011 à 11:12
Bonjour tout le monde,
J'aimerais faire quelque chose qui risque de vous paraître simple, mais qui est un véritable casse tete pour moi depuis quelques jours...... (je suis novice)
dans ma base de données sql, j'aimerais modifier plusieurs champs d'un seul coup en ciblant uniquement certaines catégories.
Voici donc globalement la structure :
Dans la table "jos_cats" sont stockées toutes les catégories (exemple : "Voitures", "Maisons" etc... avec les infos qui vont avec : description, liens images, etc...)
Dans une autre table "jos_listings" sont stockés tous les produits selon les différentes catégories.
Donc on a par exemple 15 listings "rattachés" à la catégorie Voitures, 12 listings attachés à la catégorie Maisons, etc...
Dans la table "jos_listings" chaque entrée (produit) à plusieurs champs (nom, quantité, keywords, etc..)
Par exemple, sur les listings attachés à la catégorie "voitures" ; 10 ont " berline " dans le champs "keywords" et 5 ont " SUV " dans leurs champs "keywords"
Donc pour l'instant j'ai réussi uniquement à changer tous les champs "keywords" toutes catégories confondues, avec la commande :

UPDATE 'jos_listings' SET 'keywords'='berlines'

Mais ce n'est pas ce que je veux, puisque là tous mes listings ont subi la modification en meme temps...

Je voudrais pouvoir faire la commande suivante :
tous les produits (dans la table "jos_listings") qui sont uniquement dans la catégorie "Voitures" (dans la table "jos_cats") doivent avoir le champs "keyword"='berlines' modifié

Est-ce que quelqu'un à une idée sur la requête sql que je dois écrire dans mon phpMyAdmin (3.4.7.1) ?

Merci d'avance à celui/celle qui prendra le temps de me répondre ;)

A voir également:

2 réponses

vordano Messages postés 1685 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
21 nov. 2011 à 12:51
update table1, table 2
set champ = "truc"
where table1.id = table2.id
and table1="condition"
and table1="chose"

ca devrais être un truc dans ce genre là
tu peux chercher sur google: update sur plusieurs tables
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 nov. 2011 à 13:59
Bonjour,

Tout dépend de la façon dont un produit est relié à une catégorie.
J'imagine que la table jos_listings a un champ « cats » qui donne la catégorie...

Dans ce cas, c'est très simple :
UPDATE 'jos_listings' SET 'keywords'='berlines' WHERE cats = 'Voitures'

Dans cats, c'est peut-être un id numérique... À toi de voir.

Xavier
0
Bonjour et merci d'avoir répondu aussi vite ! ;)

J'ai donc essayé ceci :

UPDATE jos_listings SET keywords='Berlines' WHERE cats = 'Voitures'
mais le résultat est :
#1054 - Unknown column 'cats' in 'where clause'

J'ai également essayé ceci:

UPDATE jos_listings, jos_cats
SET keywords='Berlines'
WHERE jos_listings.id = jos_cats.id
AND jos_cats='Voitures' (ici j'ai essayé aussi avec jos_cats='cat_id= 92' où l'id 92 correspond à la catégorie souhaitée, mais ça n'a rien changé)
mais le résultat est:
#1052 - Column 'metakey' in field list is ambiguous

J'imagine qu'il faudrait préciser que pour la partie SET keywords='Berlines' il faudrait préciser qu'il s'agit de la table " jos_listing " puisqu'il dit que cette ligne est ambiguë... ?! :(

Merci encore
0
Après avoir fait quelques essais, j'ai eu un début de résultat :

UPDATE
jos_listings, jos_cats
SET
jos_listings.keywords= 'test'
WHERE
jos_cats.cat_id=92

Après vérification les modifications ont bien été faites dans le champ keyword, mais hélas... dans TOUTES les catégories et non pas UNIQUEMENT celles dont l'id=92

:(
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 nov. 2011 à 09:49
Bonjour,

Tu te tords les neurones pour rien :)
J'avais utilisé 'cats' parce que je ne connais pas le nom de tes colonnes !
Mais à te lire, il s'agit de cat_id.

Du coup, la requête est simplement :
UPDATE 'jos_listings' SET 'keywords'='berlines' WHERE cat_id = 92

Xavier
0
Salut Xavier et merci pour ton aide !

J'ai essayé mais il me renvoie la réponse :
#1054 - Unknown column 'cat_id' in 'where clause'

Apparemment c'est parce qu'il n'a pas été chercher dans la bonne table le champ " cat_id "
Je vais essayer de mieux expliquer ma structure de la base de données
j'avais essayé de simplifier un peu en résumant mais je vais essayer de te donner un max d'infos pour pouvoir ne rien laisser échapper
Déjà c'est une base de donnée gérée par le composant Mosets Tree qui fonctionne avec Joomla
Les tables qu'il utilise sont les suivantes :
jos_mt_archived_log
jos_mt_archived_reviews
jos_mt_archived_users
jos_mt_cats
jos_mt_cfvalues
jos_mt_cfvalues_att
jos_mt_cl
jos_mt_claims
jos_mt_clone_owners
jos_mt_config
jos_mt_configgroup
jos_mt_customfields
jos_mt_favourites
jos_mt_fieldtypes
jos_mt_fieldtypes_att
jos_mt_fieldtypes_info
jos_mt_images
jos_mt_linkcheck
jos_mt_links
jos_mt_log
jos_mt_relcats
jos_mt_reports
jos_mt_reviews
jos_mt_searchlog
jos_mt_templates

Je veux faire une requête avec les 2 tables qui stockent apparemment les catégories, et les listings :
jos_mt_cats -> qui stock les catégories (j'avais simplifié le nom plus haut)
Qui à les champs suivants :
cat_id
cat_name
cat_description
(...)

jos_mt_links -> qui stock les listings (j'avais nommé jos_listings plus haut pour simplifier)
Qui a les champs suivants :
link_id
link_name
link_desc
link_keywords
user_id
(...)

j'ai donc des centaines de catégories pour des milliers de listings dans ma base..
Et j'aimerais modifier d'un coup tous les champs " link_keywords " de la table " jos_mt_links " en fonction de la catégorie à laquelle les listings appartiennent.

Par exemple je voudrais attribuer la valeur " TEST " dans le champ " link_keywords " de la table " jos_mt_links" UNIQUEMENT pour les listings qui appartiennent à la catégorie " Voitures " ( champ " cat_id=81 dans la table jos_mt_cats )

Un des soucis est que je ne trouve pas ce qui fait le lien entre les deux tables jos_mt_cats et jos_mt_links (enfin je crois qu'il devrait y avoir un lien non ?)
Comme ce n'est pas moi qui ai personnellement développé la base de donnée, j'essaie de tout décortiquer comme je peux...
C'est peu être dans une autre table mais je ne voit pas où dans ce cas..

Actuellement je suis un petit peu découragé et j'essaie d'exporter ma base de données au format CSV MS Excel, de corriger ce que je veux avec la fonction " remplacer " et les filtres, puis de ré-importer le tout dans la base de données sql...

Bonne journée et merci encore
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 nov. 2011 à 11:12
Ah ok, je n'avais pas bien compris...
En effet, tout le problème est là :
« Un des soucis est que je ne trouve pas ce qui fait le lien entre les deux tables jos_mt_cats et jos_mt_links (enfin je crois qu'il devrait y avoir un lien non ?) »

Oui il devrait y avoir un lien...
0

Discussions similaires