2

以下のステートメントは、完全に変更したい結果を返します。

SELECT * FROM `wp_posts` WHERE `ID` IN

(SELECT `post_id` FROM `wp_postmeta` WHERE (`meta_key` = 'expires') AND (`meta_value` <= NOW() - INTERVAL 1 DAY) AND (`meta_value` IS NOT NULL));

ただし、以下はエラー「#1292 - 切り捨てられた不正な日時値: ''」を返します。その結果セットの 'post_status' フィールドを更新しようとすると... 2 番目のステートメント構文のエラーはどこにありますか (以下) ?

UPDATE `wp_posts` SET `post_status`='draft' WHERE `ID` IN

(SELECT `post_id` FROM `wp_postmeta` WHERE (`meta_key` = 'expires') AND (`meta_value` <= NOW() - INTERVAL 1 DAY) AND (`meta_value` IS NOT NULL));

ありがとう。

4

1 に答える 1

0

これを試して:

UPDATE `wp_posts` 
SET    `post_status` = 'draft' 
WHERE  `id` IN (SELECT `post_id` 
                FROM   `wp_postmeta` 
                WHERE  ( `meta_key` = 'expires' ) 
                       AND ( Str_to_date(`meta_value`, '%Y-%m-%d  %h:%i:%s') <= 
                             Now() 
                             - INTERVAL 1 day 
                           ) 
                       AND ( `meta_value` IS NOT NULL )); 

または結合を使用

UPDATE a SET a.post_status='draft' FROM `wp_posts` a 
INNER JOIN `wp_postmeta` b ON a.ID=b.post_id 
WHERE `meta_key` = 'expires'
AND (`meta_value` <= NOW() - INTERVAL 1 DAY) 
AND (`meta_value` IS NOT NULL)) 

longtext を datetime に変換してみてください:

UPDATE wp_postmeta SET meta_value=STR_TO_DATE(`meta_value`,'%Y-%m-%d %h:%i:%s')
于 2013-09-29T15:59:46.207 に答える