Mysql 3表连接和更新
我正在尝试连接3个表,并根据表中的数据更新一些值 受影响的表和列包括: 使用者 id |用户|已注册 成员 用户id状态 用户元 用户id |键|值 我基本上希望从users表中获取所有用户,这些用户在7天前通过user_registered列注册,然后将他们的id与状态为active的members表的user_id连接,然后将他们与user_meta表的user_id连接,user_meta表的键为=to'capability',值为=to pending。然后最后将该值更新为active 我有以下内容,但我认为它不正确,因为它没有将记录分组在一起,也没有连接,而且我不确定语法是否正确:Mysql 3表连接和更新,mysql,date,join,Mysql,Date,Join,我正在尝试连接3个表,并根据表中的数据更新一些值 受影响的表和列包括: 使用者 id |用户|已注册 成员 用户id状态 用户元 用户id |键|值 我基本上希望从users表中获取所有用户,这些用户在7天前通过user_registered列注册,然后将他们的id与状态为active的members表的user_id连接,然后将他们与user_meta表的user_id连接,user_meta表的键为=to'capability',值为=to 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'
非常感谢您的帮助。您可以通过两种方式根据您的逻辑更新用户元表 问题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查询行的数量很大,并且列在语句中使用时没有正确索引,则查询1将花费很长时间 你有错误吗?嗨,谢谢你在这方面花时间!除了我不希望它将整个value列设置为active之外,它几乎可以完美地工作。只有具有功能键的行。任何进一步的帮助都将是非常棒的,但如果不是这样的话,谢谢你实际上,我通过更新集合部分并添加一个where来修复它。谢谢你的帮助!