【问题标题】:mySQL update next 12 NULL values with date increment by 1mySQL 更新下一个 12 个 NULL 值,日期递增 1
【发布时间】:2016-04-28 14:48:12
【问题描述】:

基本上,我有这两个查询:

SELECT * FROM table
WHERE langue = 'fr' AND hDate IS NULL
LIMIT 12;

UPDATE table
SET hDate = CURDATE() + INTERVAL 1 DAY
WHERE hDate IS NULL
LIMIT 12;  

这些适用于前 12 条 NULL 记录。如果我需要更新接下来的 12 条 NULL 记录,我必须手动将 UPDATE 查询更改为 INTERVAL 2 DAY

问题是我有 4000 条记录。

我试过了

UPDATE table t1 JOIN
(
  SELECT id, @n := @n + 1 rnum
    FROM table CROSS JOIN (SELECT @n := 0) i
  WHERE langue = 'fr'
  ORDER BY id
) t2 ON t1.id = t2.id CROSS JOIN
(
  SELECT MAX(hDate) sdate FROM table 
) q
   SET t1.hDate = q.sdate + INTERVAL t2.rnum DAY

来自这个答案:MySQL query to update records with incremented date

但这会将每条记录增加 1 天。我必须增加 12 条具有相同日期的记录,接下来 12 条带有日期 + 1 的记录,接下来 12 条带有日期 + 2 的记录等。

表定义

CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `texte` mediumtext,
  `langue` varchar(9) DEFAULT NULL,
  `hDate` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6726 DEFAULT CHARSET=utf8;

感谢您的帮助。

【问题讨论】:

  • 所有 hDate 一开始都是 NULL。我必须增加相同日期(今天)的前 12 条记录,今天 + 1 的下 12 条记录,今天 + 2 的下 12 条记录等,直到 4000 条记录结束。

标签: mysql sql date auto-increment


【解决方案1】:

http://sqlfiddle.com/#!9/7a554/1

SET @i:=0;
SET @j:=0;

UPDATE t1

RIGHT JOIN (
  SELECT 
     id
     ,IF(@j = 0 ,@j:=1, @j:=@j+1)
     ,IF((@j-1) % 12 = 0, @i:= @i+1, @i)  as i
  FROM t1
  WHERE hDate IS NULL
) idx
on idx.id = t1.id
  SET t1.hDate = CURDATE() + INTERVAL (idx.i)  DAY 

【讨论】:

  • 非常感谢!除了 IF(@j % 12 = 0 外,一切都很好。我认为它应该是 IF(@j % 12 = 1。如果不是,第一组将更新 11 条记录。你的 sql fiddle 链接也不起作用。
  • 我的错。固定的。 :-) 但请记住,从性能角度来看,这个技巧并不是最好的例子。因此,如果记录数量会增加,那么查询会变得非常慢
  • 对于 4400 条记录,它在 0.219 秒执行。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多