我试图连接3个表,并根据表中的数据更新一些值。
受影响的表格和列如下:
用户
id = user_registered
成员
user_id \x{e76f}
user_meta
user_id _ key _key_x值
基本上,我希望从用户表中获取所有用户,该表在7天前通过user_registered列注册,然后在状态处于活动状态的成员表的user_id中加入他们的id,然后将他们与user_meta表的user_id连接,其中键= to 'capability‘,值是= to’capability‘,值为pending。然后最后将值更新为active。
我有以下内容,但我不认为它是正确的,因为它没有将记录组合在一起,也没有连接起来,而且我也不确定正确的语法:
SELECT u.id, u.user_registered, p.user_id, p.status, um.user_id, um.key, um.value
FROM users u, members p, user_meta um
WHERE u.user_registered < NOW() - INTERVAL 1 WEEK AND p.status = "active" AND um.key='capability' AND value='pending'任何帮助都是非常感谢的。
发布于 2018-06-21 12:57:49
您可以根据您的逻辑以两种方式更新user_meta表。
查询1:
UPDATE user_meta
SET user_meta.value = 'active'
WHERE user_meta.user_id IN
(SELECT id
FROM (SELECT u.id
FROM users u JOIN members p ON (u.id = p.user_id)
JOIN user_meta um ON (u.id = um.user_id)
WHERE u.user_registered < NOW() - INTERVAL 1 WEEK
AND p.status = "active"
AND um.key = 'capability'
AND um.value = 'pending'
)tmp)查询2:
UPDATE user_meta
JOIN (SELECT u.id
FROM users u
JOIN members p ON (u.id = p.user_id)
JOIN user_meta um ON (u.id = um.user_id)
WHERE u.user_registered < NOW() - INTERVAL 1 WEEK
AND p.status = "active"
AND um.key = 'capability'
AND um.value = 'pending') tmp
ON (tmp.id = user_meta.user_id)
SET user_meta.value = 'active'如果select查询行的数量很大,并且由于使用IN语句而列没有正确地索引,那么查询1将花费很长的时间。
https://stackoverflow.com/questions/50965423
复制相似问题