【问题标题】:MySQL - Update field statement query/errorMySQL - 更新字段语句查询/错误
【发布时间】:2013-10-05 11:21:27
【问题描述】:

以下语句返回我想要完美更改的结果“显示第 0 - 29 行(总共 2,018 行,查询耗时 0.0781 秒)”

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));

但是,当我尝试更新结果集“post_status”字段时,以下内容返回错误“#1292 - 截断不正确的日期时间值:''”...我的错误在哪里第二个语句的语法请(下)?

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));

谢谢。

【问题讨论】:

  • meta_value 是什么类型?
  • 你是在不同的数据库上运行它吗?
  • 元值是长文本
  • 没有相同的数据库。只是里面有不同的表。
  • 不同的表是什么意思?两个查询中的表名相同。

标签: mysql syntax-error where-clause


【解决方案1】:

试试这个:

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 )); 

或者使用join

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)) 

您可以尝试将长文本转换为日期时间:

UPDATE wp_postmeta SET meta_value=STR_TO_DATE(`meta_value`,'%Y-%m-%d %h:%i:%s')

【讨论】:

  • 谢谢...但这仅返回 89 行,而不是我在“wp_postmeta”表中找到的原始语句中的 2,018 行。
  • meta_value 列的示例数据:2013-07-24 19:03:00。它还有其他与日期无关的值,例如“3”、“默认”等。但所有日期均采用 2013-07-24 19:03:00 格式。谢谢
  • SELECT post_id FROM wp_postmeta WHERE (meta_key = 'expires') AND (meta_value meta_value IS NOT NULL) ;返回 2,018 行绝对没问题......我只是无法让查询的第一个 UPDATE 部分工作......
  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID=wp_postmeta.post_id ' 附近使用正确的语法
  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'FROM wp_posts a INNER JOIN wp_postmeta b ON a.ID=b.post_id WHERE `meta_k' 附近使用正确的语法
猜你喜欢
  • 2011-05-03
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
相关资源
最近更新 更多