2013-02-28 59 views
0

我用下面的查詢來更新我的用戶表在MySQL中一個條件的SQL查詢的基地2列如何更新

update users set user_likes = 
(CASE WHEN like_by_users NOT LIKE '%user_name%' 
AND dislikes_by_users NOT LIKE '%user_name%' 
THEN (user_likes +1) ELSE user_likes END) 
WHERE post_id = '2221' 

這工作對我很好,但我也想更新likes_by_users這樣

likes_by_users = CONCAT(likes_by_users,' ','user_name') 

我試圖做這樣的

update users set user_likes = 
(CASE WHEN like_by_users NOT LIKE '%user_name%' 
AND dislikes_by_users NOT LIKE '%user_name%' 
THEN (user_likes +1), likes_by_users = CONCAT(likes_by_users,' ','user_name') 
ELSE user_likes END) 
WHERE post_id = '2221' 

不過,這並不在所有的工作。 我不想再次檢查條件,但如果上述條件爲真,那麼它不僅應該更新兩列(user_likes)和(likes_by_users)(user_likes),並且如果條件爲false,那麼它不應該更新任何列。

回答

0

你可以在WHERE子句的幫助下做到這一點。

UPDATE `users` 
SET `user_likes` = `user_level` + 1, `likes_by_users` = CONCAT(`likes_by_users`, ' ', 'user_name') 
WHERE `post_id` = '2221' 
AND `like_by_users` NOT LIKE '%user_name%' 
AND `dislikes_by_users` NOT LIKE '%user_name%' 
+0

我只需要在一個記錄應用此。我更新了我的問題。你可以現在檢查一下,並對我的問題有更簡單的瞭解。 – 2013-02-28 11:07:32

+0

只需添加帖子的ID,它不會那麼難。 – silkfire 2013-02-28 11:22:52

+0

這真的很棒。感謝這個查詢解決方案。 – 2013-02-28 13:07:56

0

嘗試像這樣

update users 
Set user_likes = IF(like_by_users NOT LIKE '%user_name%' AND dislikes_by_users NOT LIKE '%user_name%',(user_likes + 1), user_likes), 
    likes_by_users = IF(like_by_users NOT LIKE '%user_name%' AND dislikes_by_users NOT LIKE '%user_name%', CONCAT(likes_by_users,' ','user_name'), user_likes) 
WHERE post_id = 2221 
+0

但我說過,我不想檢查兩次,因爲它會減慢這個過程。我必須在一個條件的基礎上更新2列,所以我試圖找到方式,如果條件爲真,那麼更新這兩列,如果條件爲假,則什麼都不做。 – 2013-02-28 11:21:15