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周无法工作。