0
votes

MySQL Mettre à jour la valeur précédente en ajoutant une valeur soustraire avec des limites

J'ai cette requête

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 = ?;


3 commentaires

Ajouter à où et utilisateurs.crédibilité <990


Simple et brillant


Ou plutôt et utilisateurs.Crédibilité <900 manqués, vous avez ajouté 100


3 Réponses :


2
votes

Vous pouvez ajouter une contrainte code> vérifier code> pour éviter généralement les insertions / mises à jour en dehors de votre plage autorisée.

UPDATE posts_flags
    INNER JOIN
    users ON (posts_flags.user_id = users.id )
SET 
    users.credibility = MAX(MIN(users.credibility + 100, 1000), 0)
WHERE posts_flags.content_id = ?;


1 commentaires

Grande solution!



0
votes

Un simple si clause le fera xxx


0 commentaires

1
votes

Je recommande moins () ou plus grand () . Pour + 100 : xxx

pour - 100 : xxx

si vous Voulez-vous générer une erreur si la ligne est en dehors de la plage, puis dans la plupart des bases de données, vous pouvez utiliser une contrainte vérifier (dans MySQL, vous avez probablement besoin d'une gâchette). Cependant, vous semblez vouloir imposer des limites extérieures, plutôt que de générer une erreur.


0 commentaires