2012-11-17 2 views
1

J'essaie de mettre à jour le champ post-statut de tous les 'nouveaux' enregistrements où le doublet post_title peut être trouvé pour 'brouillon'. La requête de sélection suivante fonctionne comme prévu et montre les enregistrements que je veux mettre à jour -MySQL (Wordpress) - jointure interne lors de la mise à jour

select a.* FROM wp_posts AS a INNER JOIN (SELECT Greater1.post_title, Titles.ID, 
Greater1.MinID FROM (SELECT post_title, MIN(ID) AS 'MinID', MAX(ID) AS 'MaxID' FROM 
wp_posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_title 
HAVING COUNT(post_title)>1) AS Greater1 LEFT JOIN (SELECT post_title, ID FROM 
wp_posts) AS Titles ON Greater1.post_title = Titles.post_title WHERE ID > MinID) AS 
b ON a.ID = b.ID WHERE a.ID = b.ID 

Mais la requête de mise à jour suivante donne erreur de syntaxe. De l'aide?

update a.wp_posts set a.post_status='draft' FROM wp_posts AS a INNER JOIN (SELECT 
Greater1.post_title, Titles.ID, Greater1.MinID FROM (SELECT post_title, MIN(ID) AS 
'MinID', MAX(ID) AS 'MaxID' FROM wp_posts WHERE post_type = 'post' AND post_status = 
'publish' GROUP BY post_title HAVING COUNT(post_title)>1) AS Greater1 LEFT JOIN 
(SELECT post_title, ID FROM wp_posts) AS Titles ON Greater1.post_title = 
Titles.post_title WHERE ID > MinID) AS b ON a.ID = b.ID WHERE a.ID = b.ID 

Merci beaucoup.

+0

peut-être ce sont ces citations autour de MinID et MaxID vous devriez vous débarrasser de – Horen

+0

Quelle est l'erreur que vous obtenez de mysql? – Horen

Répondre

0

la syntaxe que vous utilisez est pour MSSQL, ceci est pour MySQL

UPDATE wp_posts AS a 
     INNER JOIN 
     (
      SELECT Greater1.post_title, 
        Titles.ID, 
        Greater1.MinID 
      FROM 
      (
        SELECT post_title, 
          MIN(ID) AS 'MinID', 
          MAX(ID) AS 'MaxID' 
        FROM wp_posts 
        WHERE post_type = 'post' 
          AND post_status = 'publish' 
        GROUP BY post_title 
        HAVING COUNT(post_title) > 1 
      ) AS Greater1 
       LEFT JOIN 
       (
        SELECT post_title, 
          ID 
        FROM wp_posts 
       ) AS Titles 
        ON Greater1.post_title = Titles.post_title 
      WHERE ID > MinID 
     ) AS b ON a.ID = b.ID 
SET a.post_status = 'draft' 
WHERE a.ID = b.ID 
+0

Merci, juste ce que je voulais. À votre santé!!! – user1640119

+0

@ user1640119 vous êtes les bienvenus: D –

0

Essayez ci-dessous:

 UPDATE wp_posts AS a, 
     (SELECT Greater1.post_title, 
     Titles.ID, Greater1.MinID 
     FROM 
      (SELECT post_title, 
        MIN(ID) AS 'MinID', 
        MAX(ID) AS 'MaxID' 
      FROM wp_posts 
      WHERE post_type = 'post' AND post_status = 'publish' 
      GROUP BY post_title HAVING COUNT(post_title)>1) AS Greater1 
      LEFT JOIN (
        SELECT post_title, ID 
        FROM wp_posts) AS Titles 
       ON Greater1.post_title = Titles.post_title 
       WHERE ID > MinID) AS b 
     SET a.post_status='draft' 
     WHERE a.ID = b.ID; 

SYNTAX:

  UPDATE TABLE1, TABLE2.. 
     SET COLUMN1 = ..., COLUMN2 = ... 
     WHERE TABALE1.FOREIGN_KEY_ID= TABLE2.ID //<--joining condition 
     AND TABLE1.COLUMN1=... //<--filter condition 
Questions connexes