1

テーブルが 2 つあります。1 つはユーザーで、もう 1 つはユーザー アクションを記録します。ユーザーごとのアクション数をカウントし、これを users テーブルに記録したいと考えています。約 10 万人のユーザーがいて、次のコードには 6 時間かかります。もっと良い方法があるはずです!

def calculate_invites():

sql_db.execute("SELECT id, uid FROM users")

for row in sql_db:
    id = row['id']
    uid = row['uid']

    sql1 = "SELECT COUNT(1) FROM actions WHERE uid = %s"
    sql_db.execute(sql1, uid)
    count_actions = sql_db.fetchone()["COUNT(1)"]

    sql = "UPDATE users SET count_actions=%s WHERE uid=%s"
    sql_db.execute(sql, (count_actions, uid))
4

2 に答える 2

1

ゴードンの答えはおそらくより速いので、代替としてのみ提供されます:

update users
from (
   select uid, count(*) as num_actions
   from actions
   group by uid
   ) x
set count_actions = x.num_actions
where users.uid=x.uid
于 2013-05-18T19:30:16.543 に答える