MySQL帮助:我的SQL查询的良好实践

时间:2017-11-09 17:37:05

标签: php mysql

所以目前我有一个包含2个子查询但是与源表相同的查询。

UPDATE users 
SET UserFollow=(SELECT COUNT(*) 
                FROM (SELECT * FROM users) as u1 
                WHERE u1.ReferralID=users.UserID 
                  AND u1.Activated=0), 
    UserFollower=(SELECT COUNT(*) 
                  FROM (SELECT * FROM users) as u2 
                  WHERE u2.ReferralID=users.UserID 
                    AND u2.Activated=1)

对我来说它执行的时间恰好超过4毫秒,这对于SQL查询来说是一种不好的做法。有人可以帮我提供一个更实用的SQL查询吗?

它基本上做的是获取连接到users表中每个用户帐户的Activated和Deactivated帐户的计数,并将其保存在users表上的UserFollow和UserFollower列中。

1 个答案:

答案 0 :(得分:2)

我会尝试:

UPDATE users 
SET (UserFollow, UserFollower)=
(SELECT COUNT(CASE WHEN u1.Activated=0 THEN 1 END),
        COUNT(CASE WHEN u1.Activated=1 THEN 1 END)
 FROM (SELECT * FROM users) as u1 
 WHERE u1.ReferralID=users.UserID);