如何在SQL查询中基于一个条件更新2列

时间:2013-02-28 10:53:37

标签: php mysql sql tsql

我使用以下查询来更新mysql中的users表

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,那么它不应该更新任何列。

2 个答案:

答案 0 :(得分: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%'

答案 1 :(得分: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