Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 重复项上的重复更新_Mysql - Fatal编程技术网

Mysql 重复项上的重复更新

Mysql 重复项上的重复更新,mysql,Mysql,我有一个使用事件调度器更新数据库的查询。它应该每天更新一次数据。我的问题是,如果记录存在,我无法让它更新,除非我创建唯一的索引,因为域每个月都会重复,所以我无法这样做 INSERT INTO f_s.s_d_s_tab(month,count_per_month,updated) SELECT * FROM ( SELECT DATE_FORMAT(`FE`,'%m') AS Month, COUNT(FE) AS FirstCount, domain FROM rets GROUP BY D

我有一个使用事件调度器更新数据库的查询。它应该每天更新一次数据。我的问题是,如果记录存在,我无法让它更新,除非我创建唯一的索引,因为域每个月都会重复,所以我无法这样做

INSERT INTO f_s.s_d_s_tab(month,count_per_month,updated)
SELECT * FROM 
(
SELECT
DATE_FORMAT(`FE`,'%m') AS Month, COUNT(FE) AS FirstCount, domain
FROM rets
GROUP BY DATE_FORMAT(`FE`,'%m'), domain
ORDER BY domain, Month ASC
) a
ON DUPLICATE KEY UPDATE count_per_month = a.FirstCount, updated = NOW();
记录显示是这样的

Domain    Month    coun_per_month
dom1       01        50
dom1       02        90
dom1       03        34
dom2       01        12
dom2       02        99
dom2       03        80
等等

我可以做些什么使它插入新域,但更新旧域

我的问题是,如果记录存在,我无法让它更新,除非我创建唯一的索引,因为域每个月都会重复,所以我无法这样做

INSERT INTO f_s.s_d_s_tab(month,count_per_month,updated)
SELECT * FROM 
(
SELECT
DATE_FORMAT(`FE`,'%m') AS Month, COUNT(FE) AS FirstCount, domain
FROM rets
GROUP BY DATE_FORMAT(`FE`,'%m'), domain
ORDER BY domain, Month ASC
) a
ON DUPLICATE KEY UPDATE count_per_month = a.FirstCount, updated = NOW();
当然可以-在域和月份上创建唯一索引

我的问题是,如果记录存在,我无法让它更新,除非我创建唯一的索引,因为域每个月都会重复,所以我无法这样做

INSERT INTO f_s.s_d_s_tab(month,count_per_month,updated)
SELECT * FROM 
(
SELECT
DATE_FORMAT(`FE`,'%m') AS Month, COUNT(FE) AS FirstCount, domain
FROM rets
GROUP BY DATE_FORMAT(`FE`,'%m'), domain
ORDER BY domain, Month ASC
) a
ON DUPLICATE KEY UPDATE count_per_month = a.FirstCount, updated = NOW();

当然可以-在域和月上创建唯一索引。

它看起来不像选择列表中的列与插入列表中的列“对齐”

INSERT INTO f_s.s_d_s_tab(domain, month, count_per_month, updated)
SELECT a.*
  FROM (
         SELECT r.domain                 AS domain
              , DATE_FORMAT(r.`FE`,'%m') AS month
              , COUNT(r.FE)              AS count_per_month
              , NOW()                    AS updated
           FROM rets r
          GROUP
             BY DATE_FORMAT(r.`FE`,'%m')
              , r.domain
          ORDER BY r.domain ASC, r.month ASC
       ) a
    ON DUPLICATE KEY
UPDATE count_per_month = VALUES(count_per_month)
     , updated         = VALUES(updated)

要生成“复制键”条件以获得更新操作,您需要在f_.s_d_s_选项卡(域,月)上定义一个唯一的约束(或主键)

它看起来不像选择列表中的列与插入列表中的列“对齐”

INSERT INTO f_s.s_d_s_tab(domain, month, count_per_month, updated)
SELECT a.*
  FROM (
         SELECT r.domain                 AS domain
              , DATE_FORMAT(r.`FE`,'%m') AS month
              , COUNT(r.FE)              AS count_per_month
              , NOW()                    AS updated
           FROM rets r
          GROUP
             BY DATE_FORMAT(r.`FE`,'%m')
              , r.domain
          ORDER BY r.domain ASC, r.month ASC
       ) a
    ON DUPLICATE KEY
UPDATE count_per_month = VALUES(count_per_month)
     , updated         = VALUES(updated)

要生成“复制键”条件以获得更新操作,您需要在f_.s_d_s__选项卡(域,月)上定义一个唯一约束(或主键)

唯一(域,月)
?我将使用`。。。每月更新计数=值(每月计数)`以引用本应插入的值。SELECT中的列似乎与INSERT中的列名不“对齐”。(看起来,
domain
正在被放入
updated
列。
UNIQUE(domain,Month)
?我将使用“…UPDATE count\u per\u Month=VALUES(count\u per\u Month)…”引用本应插入的值。您选择的列似乎与插入的列名不“对齐”。(看起来像是
被放入
更新的
列中。所以基本上如果域和月是唯一的,它会插入,否则它会更新?所以基本上如果域和月是唯一的,它会插入,否则它会更新?