计算表中记录的存在,然后更新同一个表

时间:2013-01-31 23:57:46

标签: mysql select

我的这个表“user”包含以下表格。

username refered refcount
 admin              3         //admin refered 3 users.(user1,user3,user6) 
 user1    admin     1
 user3    admin     0
 user4    user3     0
 user5    user1     0
 user6    admin     0

我想要做的是计算用户引用的每个人并将该计数保存到每个记录的引用计数。但是我该怎么做呢?

我尝试了这个,但收到错误

UPDATE user
SET referrals=(SELECT COUNT(userid) AS refs FROM user WHERE refered=username   )

这是我得到的错误

#1093 - You can't specify target table 'user' for update in FROM clause

1 个答案:

答案 0 :(得分:0)

stackoverflow中有几个例子。基本上你需要自己加入user表。另外我认为你的计数方法无效(我没有测试,但这应该非常接近):

UPDATE user u1
JOIN (
     SELECT u2.userid, COUNT(u2.userid) AS refs
     FROM user u2
     JOIN user u3
     on u2.username=u3.refered
     GROUP BY u2.userid
     ) u4
ON u1.userid = u4.userid
SET u1.referrals=u4.refs

u2和u3的连接构建了userid“被引用的用户”的列表 u1和u4的连接允许您从u4中选择并更新u1