Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 3表连接和更新_Mysql_Date_Join - Fatal编程技术网

Mysql 3表连接和更新

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

我正在尝试连接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来修复它。谢谢你的帮助!