2014-09-29 77 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; 
相關問題