【问题标题】:Replace values in MySQL colums from row x to row y将 MySQL 列中的值从第 x 行替换到第 y 行
【发布时间】:2017-01-04 04:53:53
【问题描述】:

我需要替换 wordpress 发布表中的发布日期。 由于迁移,有 >800.000 个帖子条目具有相同的日期。

如何将日期替换为“从第 x 行到行”?

例如:

  • 第 1 - 10.000 行的日期应为 2013-01-02 09:20:10
  • 第 10.001 - 20.000 行的日期应为 2013-02-05 12:30:21

等等……

或者用帖子ID替换?

我知道有一个 sql 查询可以做到这一点,但我不记得是哪一个以及如何正确使用它。

【问题讨论】:

  • 您正在摇摆第 1-10,000 行,由 post_id 标识,然后只需正确执行普通更新查询,其中 postid 介于 1 和 10000 等之间。

标签: mysql sql wordpress replace rows


【解决方案1】:

尝试在 sql 中添加 LIMIT 以更新行:

UPDATE {table} 
SET {datefield} = "{desired date}" 
WHERE {datefield} = "{bad date}" 
LIMIT 10000;

这将根据需要使用新日期一次更新 10000 行,但是对于哪些以何种顺序更新并不是特别挑剔,通常它将按照数据库的内部顺序(大致)按时间顺序排列。

您可以使用数据的任何其他部分来确定哪些记录应该在哪个日期更新?

【讨论】:

  • 谢谢我在第一条评论中结合了马特的建议。 UPDATE table SET datecolumn = 'new date' WHERE ID 介于 1 和 10000 之间……以此类推
【解决方案2】:

这不是您要求的,但可能会更好。您可以创建不同的时间戳,就像每 X 秒创建一个帖子一样:

update posts
set created = timestamp('2013-01-02 12:00:00') + interval id * 140 second
where 1=1

http://sqlfiddle.com/#!9/a6c7e0/2

你甚至可以让它们看起来很随机:

update posts
set created = 
  timestamp('2013-01-02 12:00:00')
  + interval id * 140 second
  + interval floor(rand()*140) second
where 1=1

http://sqlfiddle.com/#!9/b394c/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多