Faire une jointure entre deux tables.

Résolu/Fermé
Claudy - Modifié le 25 août 2019 à 17:15
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 - 25 août 2019 à 18:28
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
A voir également:

2 réponses

jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 235
25 août 2019 à 17:18
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
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
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 235 > Claudy
Modifié le 25 août 2019 à 18:08
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
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
25 août 2019 à 17:23
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
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
Par contre je ne vois pas de table bis
0
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 235 > Claudy
25 août 2019 à 18:16
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
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 235 > Claudy
25 août 2019 à 18:23
bis voulait dire que dans la version de départ la table wppavm_posts était citée 2 fois
0
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