我正在尝试联接3个表并根据表中的数据更新一些值。
受影响的表和列是:
用户
id |用户注册
成员
user_id |状态
user_meta
user_id |关键值
我基本上想从7天前之前通过user_registered列注册的用户表中获取所有用户,然后将其ID与状态为活动的成员表的user_id结合在一起,然后将其与的user_id结合起来user_meta表,其中键是=“功能”,值是=待定。然后,最后将该值更新为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'
非常感谢您的帮助。
答案 0 :(得分:1)
您可以通过两种方式根据逻辑更新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'
如果选择查询的行数很大并且使用 IN 语句对列进行了索引不正确,则查询1将花费很长时间。