Requête SQL avec 2 tables différentes

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 ;)

2 réponses

  1. 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
    1. 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
      1. 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
      2. 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

        :(
      3. 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
      4. 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
      5. 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...