2014-09-29 47 views
0

我会尽量让自己变得尽可能清晰。从另一列更新最高值的sql列

我有两个表,一个叫Users,另一个叫Users_status。

表用户

column 1 : id (pk) 
column 2 : status (fk) 

表Users_status

column 1 : user_id (fk) 
column 2 : user_status (fk) 

我要做出验证了该该表用户的列2到列2日一个cron Users_status 表Users_status可能会有多次user_id重复,并且user_status递增,如下所示:

表根据最新Users_status

user_id : 1 
user_status : 1 

user_id : 1 
user_status : 2 

user_id : 1 
user_status : 3 

user_id : 2 
user_status : 1 

user_id : 2 
user_status : 2 

欲用1个请求,来更新表的用户的第二列(状态)(最高)user_status存在于表Users_status 我也想以不更新已经具有良好状态的行(与表Users_status相同的状态)

这怎么办?我已经尝试了很多东西,当我尝试这样做时,它会将状态从1更改为2,并将2更改为1,或者发生一些MYSQL约束错误。

我真的很高兴,如果有人可以帮助我对

感谢,

+0

具体而言,最高状态,无论给定用户输入的最后状态如何。 – DRapp 2014-09-29 16:36:30

回答

1

您可以使用加入与该

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 
+0

谢谢你完成这项工作,我想我错过了一部分,我仍然不明白为什么 – Enjoyted 2014-09-30 08:04:26

0

这个查询工作对我来说一个子查询:

update users set status = case when id <> (select b.j from (select m.id j 
from users m join users_status n on m.id=n.user_id and m.status=n.user_status) b) then 
(select max(user_status) from users_status group by user_id having 
users_status.user_id=users.id) 
    else status END;