首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql 3表连接和更新

Mysql 3表连接和更新
EN

Stack Overflow用户
提问于 2018-06-21 09:45:16
回答 1查看 46关注 0票数 0

我试图连接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。

我有以下内容,但我不认为它是正确的,因为它没有将记录组合在一起,也没有连接起来,而且我也不确定正确的语法:

代码语言:javascript
复制
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'

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 12:57:49

您可以根据您的逻辑以两种方式更新user_meta表。

查询1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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将花费很长的时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50965423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档