[SQL] Inverser un champ
Fermé
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
- Comment inverser un texte sur word - Guide
- Sql lister les tables ✓ - Forum Programmation
- Le nom du champ de tableau croisé dynamique n'est pas valide - Forum Excel
1 réponse
GallyNet
Messages postés
434
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
15 décembre 2008
387
23 nov. 2005 à 17:18
23 nov. 2005 à 17:18
Est-ce que tu peut rajouter une valeur a ton enum ? Si oui tu lui rjoute 2 et tu fais :
UPDATE maTable SET champ=2 WHERE champ=0; UPDATE maTable SET champ=0 WHERE champ=1; UPDATE maTable SET champ=1 WHERE champ=2;
6 janv. 2009 à 17:48
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.
6 janv. 2009 à 17:56
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".
29 févr. 2012 à 12:34
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... ;)