0

次のテーブルを持つこのテーブル「ユーザー」があります。

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
4

1 に答える 1

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

useridu2 と u3 の結合により、「参照されているユーザー」のリストが作成され
ます u1 と u4 の結合により、u4 から選択して u1 を更新できます

于 2013-02-01T00:10:25.513 に答える