代码之家  ›  专栏  ›  技术社区  ›  Silver Ringvee

mysql基于select,基于当前行值更新多行

  •  0
  • Silver Ringvee  · 技术社区  · 6 年前

    我想更新我的表 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天中实际进行的会话数时,这些数字并不匹配。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Juan Carlos Oropeza    6 年前

    使用关联查询:

    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