2009-03-20 11 views
21

J'ai une colonne dans mon tableau intitulé «autorisé». Sa valeur par défaut est 0. Il doit être changé à 1 lorsque l'utilisateur est autorisé, mais il doit pouvoir être remis à 0. Je sais que je pourrais le faire facilement avec 2 requêtes comme ceci:Existe-t-il un moyen, dans MySQL, d'inverser un champ booléen avec une requête?

$authorised = Db::query('SELECT authorised FROM users WHERE id=2'); 

$newAuthValue = ($authorised['authorised']) ? 0 : 1; 

Db::query('UPDATE users SET authorised=' . $newAuthValue . ' WHERE id=2'); 

Qu'est-ce que Je voulais savoir, est-il un moyen de le faire avec une requête? Pour inverser une valeur booléenne?

Répondre

27
UPDATE users SET `authorised` = IF (`authorised`, 0, 1) 
+0

Cela semble plus propre IMO. :) – alex

+0

Assurez-vous simplement d'ajouter votre clause where, alex. –

+0

@Peter, merci, et oui je l'ai fait. – alex

4

Il y a plusieurs façons de le faire, voici un simple:

UPDATE users SET authorised = ABS(authorised - 1) WHERE id = 2; 
+0

Oups, manqué cela. Merci Chad. – alex

+4

pourquoi ne pas simplement "1 - autorisé"? – nickf

+1

@nickf: Je suis d'accord avec vous, ce qui suit devrait fonctionner: utilisateurs UPDATE SET autorisé = 1 - autorisé WHERE id = 2; – dalle

30
UPDATE `users` SET `authorised` = NOT `authorised` WHERE id = 2 

Cette requête travaillera également à nier le terrain, et est plus en ligne avec la syntaxe booléenne.

+0

Ok, cela n'a pas été affiché correctement, ces barres obliques devraient être en arrière, qui sont l'encapsuleur MySQL par défaut. –

+0

C'est un bon ...! +1 – alex

+1

SET autorisé =! Autorisé –

4

Il est également possible d'utiliser XOR si votre champ « booléen » est mis en œuvre comme TINYINT:

UPDATE users SET authorised = authorised XOR 1 WHERE id = 2; 

Ceci règlera « autorisé » à 0 si actuellement 1 et 1 si actuellement 0. Il sera Égaliser toutes les valeurs non nulles est donc une solution idéale si vous (comme moi) utilisez plusieurs valeurs positives pour refléter une variété de niveaux «actifs», mais devez toujours revenir à 0 lorsque vous êtes «éteint».

Questions connexes