Requête SQL avec 2 tables différentes

Taloo -  
Reivax962 Messages postés 3742 Statut Membre -
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. vordano Messages postés 1981 Statut Membre 316
     
    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
  2. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    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
    1. Taloo
       
      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
    2. Taloo
       
      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
    3. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      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
    4. Taloo
       
      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
    5. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      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