0

EVENT SCHEDULER を使用してデータベースを更新するクエリがあります。1日1回データを更新することになっています。私の問題は、ドメインが毎月繰り返されるため、実行できないUNIQUE INDEXを作成しない限り、レコードが存在する場合に更新できないことです。

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

等....

新しいドメインを挿入して古いドメインを更新するにはどうすればよいですか。

4

2 に答える 2

2

私の問題は、ドメインが毎月繰り返されるために作成できないUNIQUE INDEXを作成しない限り、レコードが存在する場合は更新できないことです。

確かに、ドメインと月に複数列の一意のインデックスを作成できます。

于 2012-12-12T19:45:49.313 に答える
1

SELECT リストの列が INSERT リストの列と「整列」しているようには見えません。

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)

UPDATE アクションを取得するための「重複キー」条件を生成するには、UNIQUE 制約 (または PRIMARY KEY) を定義する必要がありますON f_s.s_d_s_tab (domain, month)

于 2012-12-12T21:00:36.603 に答える