Faire une jointure entre deux tables.

Résolu
Claudy -  
jee pee Messages postés 9441 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,

Voici mon problème,
Je fais la requête sql suivante sur la table `wppavm_postmeta` afin de récupérer la valeur post_id :
SELECT * FROM `wppavm_postmeta` 
WHERE `meta_key` LIKE '_awpcp_extra_field[4]' 
AND `meta_value` <= subdate(now(),1)


Et voici le résultat :

meta_id post_id meta_key meta_value
7327 2617 _awpcp_extra_field[4] 2019/08/24
9638 2748 _awpcp_extra_field[4] 2019/08/24
9669 2765 _awpcp_extra_field[4] 2019/08/24
9709 2767 _awpcp_extra_field[4] 2019/08/24


Je transfère ensuite les valeurs de post_id dans les requêtes suivantes pour la table `wppavm_posts` afin de changer la valeur de `post_status` :
UPDATE `wppavm_posts` SET `post_status` = 'trash' WHERE `wppavm_posts`.`ID` = 2617;
UPDATE `wppavm_posts` SET `post_status` = 'trash' WHERE `wppavm_posts`.`ID` = 2748;
UPDATE `wppavm_posts` SET `post_status` = 'trash' WHERE `wppavm_posts`.`ID` = 2765;
UPDATE `wppavm_posts` SET `post_status` = 'trash' WHERE `wppavm_posts`.`ID` = 2767;


Cela fonctionne parfaitement, mais serait-il possible de faire tout-ceci automatiquement dans une seule requête? Sachant que les résultats post_id sont à chaque fois différents et leurs quantités également.
Avec mes remerciements
Claudy

2 réponses

  1. jee pee Messages postés 9441 Date d'inscription   Statut Modérateur Dernière intervention   9 981
     
    Bonjour,

    Avec par exemple :
    UPDATE `wppavm_posts` 
    SET `post_status` = 'trash' 
    WHERE `wppavm_posts`.`ID` IN (SELECT post_id FROM `wppavm_postmeta` 
                                  WHERE `meta_key` LIKE '_awpcp_extra_field[4]' 
                                  AND `meta_value` <= subdate(now(),1) ) 

    0
    1. Claudy
       
      Je te remercie pour ta réponse rapide.
      J'ai fait l'essai "Select" qui fonctionne.
      Par contre "UPDATE" me renvoie l'erreur suivante:
      MySQL a répondu : Documentation

      #1064 - Erreur de syntaxe près de 'FROM
      wppavm_posts
      JOIN wppavm_postmeta ON wppavm_posts.ID = wppavm_po' à la ligne 5

      Cde
      Claudy
      0
      1. jee pee Messages postés 9441 Date d'inscription   Statut Modérateur Dernière intervention   9 981 > Claudy
         
        C'est sur le post de yg_be que tu aurais du répondre. Enlève le from et la table bis

        UPDATE 
            wppavm_posts
        JOIN wppavm_postmeta ON wppavm_posts.ID = wppavm_postmeta.post_id
        SET 
            post_status = 'trash'
        WHERE 
            wppavm_postmeta.meta_key =  '_awpcp_extra_field[4]' 
            AND wppavm_postmeta.meta_value <= subdate(now(),1)
        
        0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, peut-être:
    UPDATE 
        wppavm_posts
    SET 
        post_status = 'trash'
    FROM 
        wppavm_posts
        JOIN wppavm_postmeta ON wppavm_posts.ID = wppavm_postmeta.post_id
    WHERE 
        wppavm_postmeta.meta_key =  '_awpcp_extra_field[4]' 
        AND wppavm_postmeta.meta_value <= subdate(now(),1)

    pour tester, tu peux peut-être d'abord faire:
    select *
    FROM 
        wppavm_posts
        JOIN wppavm_postmeta ON wppavm_posts.ID = wppavm_postmeta.post_id
    WHERE 
        wppavm_postmeta.meta_key =  '_awpcp_extra_field[4]' 
        AND wppavm_postmeta.meta_value <= subdate(now(),1)
    0
    1. Claudy
       
      J'ai de maintenant cette réponse:
      #1064 - Erreur de syntaxe près de 'JOIN wppavm_postmeta ON wppavm_posts.ID = wppavm_postmeta.post_id
      WHERE
      w' à la ligne 5
      0
    2. Claudy
       
      Par contre je ne vois pas de table bis
      0
    3. jee pee Messages postés 9441 Date d'inscription   Statut Modérateur Dernière intervention   9 981 > Claudy
       
      as-tu bien pris ma version corrigée :
      UPDATE 
          wppavm_posts
      JOIN wppavm_postmeta ON wppavm_posts.ID = wppavm_postmeta.post_id
      SET 
          post_status = 'trash'
      WHERE 
          wppavm_postmeta.meta_key =  '_awpcp_extra_field[4]' 
          AND wppavm_postmeta.meta_value <= subdate(now(),1)
      0
    4. jee pee Messages postés 9441 Date d'inscription   Statut Modérateur Dernière intervention   9 981 > Claudy
       
      bis voulait dire que dans la version de départ la table wppavm_posts était citée 2 fois
      0
    5. Claudy
       
      J'ai pris ta dernière réponse et ça fonctionne parfaitement.
      Je te remercie beaucoup tu m'a vraiment retiré une épingle du pied.
      Merci encore, cordialement
      Claudy
      0