MySQL更新在多个join语句中,只使用第三个表中的最高值

MySQL更新在多个join语句中,只使用第三个表中的最高值,mysql,join,sql-update,multiple-tables,Mysql,Join,Sql Update,Multiple Tables,(我知道这可以通过重新设计数据库来解决,但我已经花了很多时间研究我的问题,我希望能找到一个对以后也有用的解决方案……) 我有一个注册系统。参与某项活动的用户将被放置在注册表中,该表将链接到活动表,该表将链接到周表,当用户参与的最后一项活动超过四周时,我需要匿名(更新)用户表中的名称 我的桌子是这样的: USERS id, name REGISTRATION uid, aid (uid = USERS.id, aid = ACTIVITY.id) ACTIVITY wid (wid = WEE

(我知道这可以通过重新设计数据库来解决,但我已经花了很多时间研究我的问题,我希望能找到一个对以后也有用的解决方案……)

我有一个注册系统。参与某项活动的用户将被放置在注册表中,该表将链接到活动表,该表将链接到周表,当用户参与的最后一项活动超过四周时,我需要匿名(更新)用户表中的名称

我的桌子是这样的:

USERS
id, name

REGISTRATION
uid, aid (uid = USERS.id, aid = ACTIVITY.id)

ACTIVITY
wid (wid = WEEKS.id)

WEEKS
year, weeknumber
我的任务是找到4周内未注册某项活动的所有USERS.id,在这种情况下,我需要匿名(更新)USERS.name字段。因此,我需要选择所有用户,并通过注册表查找最近周数为WEEKS.year+WEEKS.weeknumber的活动,然后确定该条目是否超过4周

我相信我已经能够通过选择解决这一问题,并给出以下声明:

SELECT u.id, r.act_id, a.wid, w.weeknumber, w.year
FROM users AS u 
    INNER JOIN registration AS r ON r.uid = u.id
    INNER JOIN activity AS a ON a.id = r.aid
    INNER JOIN weeks AS w ON w.id = (
        SELECT id
        FROM weeks AS w2
        WHERE w2.id = a.wid
        ORDER BY year DESC, weeknumber DESC
        LIMIT 1
        )
WHERE w.year=YEAR(NOW())
AND w.weeknumber=WEEK(NOW())-5
GROUP BY u.id
ORDER BY u.id DESC
但是,我无法将其转换为功能性的更新语句。到目前为止,我所拥有的似乎没有从weeks表中获得最新条目:

UPDATE users u
    JOIN registration AS r ON r.uid = u.id
    JOIN activity AS a ON a.id = r.aid
    JOIN weeks AS w ON w.id = (
        SELECT id
        FROM weeks AS w2
        WHERE w2.id = a.wid
        ORDER BY year DESC, weeknumber DESC
        LIMIT 1
        )
SET u.name = 'Anonymized'
WHERE w.year=YEAR(NOW())
AND w.weeknumber=WEEK(NOW())-5

如果有人能给我指出正确的方向,我将不胜感激。

请仔细思考并编辑你的问题,因为你的问题越来越复杂,不太可能有人能在没有密码的情况下帮助你,因为前4周是前一年,所以你的代码在一年的前4周无法工作。