[SQL] Inverser un champ
frank
-
neemzy -
neemzy -
Bonjour,
j'ai un champ enum('0', '1')
dans une table il est par defaut à 0 et j'aimerais une requete qui si ce champ est à 0 le fait passer à 1 et s'il est à 1 le fait passer à 0
je pourrais passer par php pour recupérer la valeur du champs puis faire la requete en conséquence mais je prefere le faire directement avec MYSQl si c'est possible
merci d'avance
j'ai un champ enum('0', '1')
dans une table il est par defaut à 0 et j'aimerais une requete qui si ce champ est à 0 le fait passer à 1 et s'il est à 1 le fait passer à 0
je pourrais passer par php pour recupérer la valeur du champs puis faire la requete en conséquence mais je prefere le faire directement avec MYSQl si c'est possible
merci d'avance
A voir également:
- [SQL] Inverser un champ
- Inverser ecran pc - Guide
- Inverser deux colonnes excel - Guide
- Logiciel sql - Télécharger - Bases de données
- Excel champ calculé avec condition - Forum Excel
- Inverser touche fn ✓ - Forum Windows 7
Plutôt que d'utiliser un champ ENUM('0', '1') pour gérer les cas true/false avec MySQL, j'utilise un champ de type TINYINT(1) dans lequel j'envoie soit 0, soit 1.
Pour la mise à jour de la table, par exemple pour définir si un utilisateur est à l'état "accepté" ou à l'état "non accepté", j'utilise les fonctions MOD(n,m) (fonction modulo) et ABS(x) (fonction absolu) :
UPDATE user_tb SET user_estAccepte = ABS(MOD(user_estAccepte, 2) - 1) WHERE user_id = 1 OR user_id=3 OR user_id = 15;
En effet, ABS(MOD(0,2) - 1) = 1 et ABS(MOD(1,2) - 1) = 0 : on obtient "l'inverse binaire".
Si l'utilsateur 3 est accepté, il passe à l'état "non accepté" et si l'utilisateur 15 est non accepté, il passe à l'état "accepté" ... le tout dans une seule et même requête.
Bon MySQL.
UPDATE user_tb SET user_estAccepte = ABS(user_estAccepte - 1) WHERE user_id = 1 OR user_id=3 OR user_id = 15;
En effet, ABS(0 - 1) = 1 et ABS(1 - 1) = 0 : on obtient "l'inverse binaire".
L'idée proposée par Login Art n'est pas mauvaise, mais même sa version simplifiée peut encore être améliorée : il est possible de faire cela sans utiliser la moindre fonction SQL, simplement en inversant l'opération. Voyez plutôt :
UPDATE user_tb SET user_estAccepte = (1 - user_estAccepte) WHERE [...]
En effet, 1 - 1 = 0 et 1 - 0 = 1. Il suffisait d'y penser... ;)