Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 根据日期列使用另一列中的值更新sql列_Mysql - Fatal编程技术网

Mysql 根据日期列使用另一列中的值更新sql列

Mysql 根据日期列使用另一列中的值更新sql列,mysql,Mysql,从上一篇文章中,我得到了我需要的帮助,但是规格有了一些变化,我仍然需要一些帮助 我会尽量把自己说清楚的 我有两个表,一个叫做Users,另一个叫做Users\u status 表用户 表2用户的状态 我想制作一个cron来验证表Users的第2列是否是表Users\u状态的最新状态。表Users_status可能会多次重复user_id,user_status会递增,如下所示: 表2用户的状态 我希望通过1个请求,根据表用户状态中当前创建的最新状态更新表用户状态的第二列。我还希望不更新状态与表用

从上一篇文章中,我得到了我需要的帮助,但是规格有了一些变化,我仍然需要一些帮助

我会尽量把自己说清楚的

我有两个表,一个叫做Users,另一个叫做Users\u status

表用户

表2用户的状态

我想制作一个cron来验证表Users的第2列是否是表Users\u状态的最新状态。表Users_status可能会多次重复user_id,user_status会递增,如下所示:

表2用户的状态

我希望通过1个请求,根据表用户状态中当前创建的最新状态更新表用户状态的第二列。我还希望不更新状态与表用户状态相同的行

如何做到这一点? 当我只需要根据最高的MAX user_status值更新第一个表时,我这样做了感谢@Gervs:

UPDATE users
JOIN (SELECT
         user_id,
         MAX(status) status
      FROM
         users_status
      GROUP BY user_id
     ) st
ON users.id = st.user_id
SET users.status = st.status
WHERE users.status < st.status 
如果有人能在这方面给我帮助,我真的很感激,我想这种要求对我来说有点太复杂了:p


谢谢,

假设我们只想更新那些包含相同用户id和用户状态的多个条目的记录 请尝试以下内容:

     update Users X ,
    (select a.user_id,a.user_status from (select user_id,user_status from users_status 
group by user_id,user_status having count(*)>1) a 
    inner join 
    (select user_id,user_status from 
    (select user_id,user_status from users_statys
order by status_created_at desc)temp 
group by user_id,user_status)b 
    on 
    a.user_id = b.user_id and a.user_status  = b.user_status) Y ,

 set X.status = Y.user_status where  X.id = Y.user_id; 
请原谅打字错误:

如果您可以在sqlfiddle中添加数据,那么我可以通过查询查看:

UPDATE users
JOIN (SELECT s.user_id,
          s.status
      FROM
          (SELECT
               user_id,
               MAX(status_created_at) status_created_at
           FROM
               users_status
           GROUP BY user_id) m
           JOIN
               user_status s USING (user_id, status_created_at)
           ) c
 SET users.status = c.status
 WHERE users.id = c.user_id 

在日期数据类型上是StasuSuxCudioType吗?你可以考虑使用一个后插入Triger-你是一种病态的SQL制造者,AHAH,它正在工作!你有没有可能在你的回答中详细说明,你是如何得出这个结论的?我很想听听你的键盘上没有回车键吗?@Gery,啊。。对不起,你是对的。。我只是快速编写查询并发布它。。让我把它格式化。谢谢你的建议
UPDATE users
JOIN (SELECT
         user_id,
         MAX(status) status
      FROM
         users_status
      GROUP BY user_id
     ) st
ON users.id = st.user_id
SET users.status = st.status
WHERE users.status < st.status 
     update Users X ,
    (select a.user_id,a.user_status from (select user_id,user_status from users_status 
group by user_id,user_status having count(*)>1) a 
    inner join 
    (select user_id,user_status from 
    (select user_id,user_status from users_statys
order by status_created_at desc)temp 
group by user_id,user_status)b 
    on 
    a.user_id = b.user_id and a.user_status  = b.user_status) Y ,

 set X.status = Y.user_status where  X.id = Y.user_id; 
UPDATE users
JOIN (SELECT s.user_id,
          s.status
      FROM
          (SELECT
               user_id,
               MAX(status_created_at) status_created_at
           FROM
               users_status
           GROUP BY user_id) m
           JOIN
               user_status s USING (user_id, status_created_at)
           ) c
 SET users.status = c.status
 WHERE users.id = c.user_id