0

我想visitors根据count()另一个名为sessions.

我到目前为止的代码:

UPDATE visitors
INNER JOIN sessions 
   on visitors.visitor_ID = sessions.visitor_ID
SET visitors.last_30_day_sessions = (select count(sessions.session_ID) 
                                     where sessions.session_timestamp >= NOW() - INTERVAL 30 DAY)

它似乎在做某事,但当我简单地检查访问者在过去 30 天内实际进行的会话数时,数字不匹配。

4

1 回答 1

1

使用相关查询:

UPDATE visitors
SET last_30_day_sessions = ( SELECT count(session_ID) 
                             FROM sessions
                             WHERE visitors.visitor_ID = sessions.visitor_ID
                               AND sessions.session_timestamp >= NOW() - INTERVAL 30 DAY
                           )

作为奖励,如果你想使用 join 你需要先计算总数

UPDATE visitors V
JOIN (SELECT visitor_ID, count(session_ID) session_count
      FROM sessions
      WHERE session_timestamp >= NOW() - INTERVAL 30 DAY
      GROUP BY visitor_ID
     ) s
   ON v.visitor_ID = s.visitor_ID
SET v.last_30_day_sessions  = s.session_count
于 2018-07-09T15:12:06.143 回答