0

我有一张这样的桌子:

 CREATE TABLE `UserTmp` (
`user_id` bigint(20) unsigned NOT NULL,
`nb_invit` bigint(20) unsigned DEFAULT '0',
`nb_share` bigint(20) unsigned DEFAULT '0',
`nb_sent` bigint(20) unsigned DEFAULT '0',
`total` bigint(20) unsigned DEFAULT '0',
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

我想执行 3 个这样的查询(每个表一个,以便拥有 nb_share、nb_invit 和 nb_sent):

INSERT INTO UserTmp (user_id, nb_share)
  select user_id, count(share_date) as 'nb_share' 
  from Share 
  where share_date between '2012-05-21 00:00:00' and '2012-05-28 00:00:00'
ON DUPLICATE KEY UPDATE nb_share=VALUES(nb_share);

nb_share 字段等于表中存在的当前用户的共享数,需要更新

目标是获得用户列表,其中包含操作数和一个总字段,该字段是用户完成的操作的总和。

VALUES(nb_share) 接缝给我所有用户而不是当前用户的 nb_share 总数。

你有解决这个问题的想法吗?

谢谢

4

2 回答 2

3

您需要对SELECTby进行分组user_id

INSERT INTO UserTmp (user_id, nb_share)
  SELECT   user_id, count(share_date)
  FROM     Share
  WHERE    share_date BETWEEN '2012-05-21 00:00:00' AND '2012-05-28 00:00:00'
  GROUP BY user_id
ON DUPLICATE KEY UPDATE nb_share = VALUES(nb_share)
于 2012-05-31T08:55:45.457 回答
0

或者您可以使用用户定义的变量:

INSERT INTO UserTmp (user_id, nb_share)
  SELECT   user_id, @nbshare := count(share_date)
  FROM     Share
  WHERE    share_date BETWEEN '2012-05-21 00:00:00' AND '2012-05-28 00:00:00'
  GROUP BY user_id
ON DUPLICATE KEY UPDATE nb_share = @nbshare
于 2015-02-25T18:11:34.737 回答