我有这个查询

UPDATE posts_flags
    INNER JOIN
    users ON (posts_flags.user_id = users.id )
SET
    users.credibility = users.credibility + 100 /* or -100 */
WHERE posts_flags.content_id = ?;


是否可以将新值限制在一个范围内,例如0-1000?

最佳答案

我建议LEAST()GREATEST()。对于+ 100

UPDATE posts_flags pf INNER JOIN
       users u
       ON pf.user_id = u.id
    SET u.credibility = LEAST(u.credibility + 100, 1000)
WHERE pf.content_id = ?;


对于- 100

UPDATE posts_flags pf INNER JOIN
       users u
       ON pf.user_id = u.id
    SET u.credibility = GREATEST(u.credibility - 100, 0)
WHERE pf.content_id = ?;


如果要在行超出范围的情况下生成错误,则在大多数数据库中,可以使用check约束(在MySQL中,您可能需要触发器)。但是,您似乎想施加外部限制,而不是产生错误。

10-08 12:57