Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/03/2011, 16h11   #1
Membre du Club
 
Inscription : juillet 2005
Messages : 287
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 287
Points : 56
Points : 56
Par défaut Utilisation d'un AND dans une mise à jour

Est-il possible de faire ceci dans une requete ?

Code :
1
2
3
UPDATE matable
 SET
 monchamp = monchamp AND 2
Merci de votre aide
richard038 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 17h20   #2
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 125
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 125
Points : 29
Points : 29
Non.

TU peux utiliser un AND pour additionner des conditions.

Code :
1
2
3
UPDATE matable
 SET
 monchamp = monchamp, monchamp1 = monchamp1 WHERE Champ = X AND champs2 = X
xoum89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 09h31   #3
Membre du Club
 
Inscription : juillet 2005
Messages : 287
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 287
Points : 56
Points : 56
J'avoue n'avoir pas bien compris.

En fait mon besoin. Pour mes enregistrement j'ai besoin de définir des statuts (lecture seule, non supprimable...)
Soit je crée un champs par statut, soit j'utilise un seule champs avec (1: lecture seule, 2: non supprimable, 4:...)
Et donc pour ajouter un statut soit j'utilise un AND soit une addition.
Et pour vérifier les statuts utiliser un XOR

Si quelqu'un a utiliser une méthode similaire je suis preneur, merci
richard038 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 09h39   #4
Membre Expert
 
Avatar de Nudger
 
Homme Thomas Arnaud
Directeur de projet
Inscription : octobre 2010
Messages : 452
Détails du profil
Informations personnelles :
Nom : Homme Thomas Arnaud
Âge : 36
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2010
Messages : 452
Points : 1 012
Points : 1 012
Envoyer un message via Skype™ à Nudger
Bonjour,

Le "AND" est un opérateur logique il travaille avec des "vrai" ou des "faux".

Pour les opérateurs binaires, je ne crois pas que ce soit standard SQL.

Voici comment faire avec MySQL:
http://dev.mysql.com/doc/refman/5.0/...functions.html
__________________
www.nudge.org Surveillez et optimisez vos applications Java
Nudger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 11h13   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par richard038 Voir le message
J'avoue n'avoir pas bien compris.
Moi je n'ai pas compris ce que tu veux faire !

Citation:
En fait mon besoin. Pour mes enregistrements j'ai besoin de définir des statuts (lecture seule, non supprimable...)
Soit je crée un champs par statut, soit j'utilise un seul champ avec (1: lecture seule, 2: non supprimable, 4:...)
Et donc pour ajouter un statut soit j'utilise un AND soit une addition.
Et pour vérifier les statuts utiliser un XOR
Tu peux donner un exemple de données avec une explication plus claire du besoin et le résultat attendu après modification ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 12h29   #6
Membre du Club
 
Inscription : juillet 2005
Messages : 287
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 287
Points : 56
Points : 56
je voulais utiliser un champs mon_champ_statut de type integer par defaut à 0

pour identifier un enregistrement en lecture seule: mon_champ_status = 1
pour identifier un enregistrement en lecture seule + non supprimable: mon_champ_status = 3 (1 + 2)
pour identifier un enregistrement non supprimable: mon_champ_status = 2

Ce qui me permettait à partir d'un seul champs d'avoir plusieurs utilisations
Je peux ainsi ajouter de nouveaux statuts: statut1 (4), statut2 (8).... sans avoir à ajouter de champs dans ma table

à partir d'un statut, pour ajouter une option, je ferai ancienne option AND statuts (exemple de lecture seule à lecture seule + non supprimable, je fait mon_champ_statut = mon_champ_statut AND 2
donc requete

Code :
UPDATE ma_table SET mon_champ_statut = mon_champ_statut AND 2
Pour récupérer toutes les enregistrement en lecture seule, requete
Code :
SELECT * FROM ma_table WHERE (mon_champ_statut XOR 1 = 1)
Voila, je ne sais pas si j'ai été clair
richard038 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 13h27   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Citation:
à partir d'un statut, pour ajouter une option, je ferai ancienne option AND statuts
Citation:
pour identifier un enregistrement en lecture seule + non supprimable: mon_champ_status = 3 (1 + 2)
Pourquoi veux-tu utiliser l'opérateur logique AND alors que c'est d'une addition arithmétique dont tu as besoin (+) ?
Code :
1
2
UPDATE ta_table
SET ta_colonne_et_pas_ton_champ = ta_colonne_et_pas_ton_champ + la_valeur_statut_a_ajouter
Sinon, l'autre solution plus relationnelle est de créer une table de référence des statuts et une table associative entre ta table et les statuts.

MCD :
Ton_machin -1,n----Avoir----0,n- Statut

Tables :
Ta_table (tt_id,...)
Statut (stt_id, stt_libelle)
Avoir (avr_id_ta_table, avr_id_statut)

Là on fait de la BDD relationnelle ! Pas de la cuisine à coup d'ajouts d'une pincée de statut X ou Y !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h58   #8
Membre du Club
 
Inscription : juillet 2005
Messages : 287
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 287
Points : 56
Points : 56
Ce n'est surtout pas une addition, mais bien un AND

Il y a effectivement ta solution, ou l'ajout d'un champs par statut. Je cherchais une solution qui m'évitais de modifier la structure de la base à chaque ajout de nouveaux statuts, et qui également au niveau de l'application de ne gérer qu'une seule donnée
richard038 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 16h01   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par richard038 Voir le message
Ce n'est surtout pas une addition, mais bien un AND
Admettons...
Citation:
à partir d'un statut, pour ajouter une option, je ferai ancienne option AND statuts (exemple de lecture seule à lecture seule + non supprimable, je fait mon_champ_statut = mon_champ_statut AND 2
Tu donnes toi même la requête :
Code :
1
2
UPDATE ma_table 
SET mon_champ_statut = mon_champ_statut AND 2
On part donc de la valeur mon_champ_statut = 1 et on fait l'opération 1 AND 2.
=> Résultat (chez MySQL avec un SELECT 1 AND 2) : 1
Au passage, SELECT 2 AND 5 donne aussi 1 !

Tu es toujours sûr que c'est un AND qu'il te faut ?
Ce n'est pas moi qui l'écris mais toi :
Citation:
pour identifier un enregistrement en lecture seule + non supprimable: mon_champ_status = 3 (1 + 2)
Citation:
Il y a effectivement ta solution
Qui est la bonne dans le contexte d'une BDD relationnelle normalisée.
Citation:
ou l'ajout d'un champs par statut
Qui est une horreur relationnelle !

Citation:
Je cherchais une solution qui m'évitais de modifier la structure de la base à chaque ajout de nouveaux statuts
C'est le cas de ma solution avec la table associative.
Un nouveau statut possible apparaît ? Tu l'ajoutes dans la table Statut.
Un élément existant doit voir ce nouveau statut (ou un autre) ajouté à celui ou ceux qu'il a déjà ? Tu ajoutes une ligne dans la table associative.
Rien a changer dans la structure de la BDD.

Citation:
et qui également au niveau de l'application de ne gérer qu'une seule donnée
C'est le cas avec la table associative : on ne gère que des couples {identifiant_objet, identifiant_statut}.

Citation:
Pour récupérer tous les enregistrements en lecture seule
Code :
1
2
3
4
SELECT les_colonnes_necessaires
FROM ta_table t
INNER JOIN statut s ON s.stt_id = t.tt_id_statut
WHERE s.stt_libelle = 'Lecture seule'
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 16h24   #10
Membre du Club
 
Inscription : juillet 2005
Messages : 287
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 287
Points : 56
Points : 56
t'as raison, ce n'est pas un AND mais un OR, que je devrais utiliser
richard038 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 16h34   #11
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par richard038 Voir le message
t'as raison, ce n'est pas un AND mais un OR, que je devrais utiliser
Pfiou... t'es têtu toi !

Chez MySQL :
=> résultat : 1

=> résultat : 1

=> résultat : 1

Ce genre d'opération donnera toujours 1 ! C'est une opération booléenne !

Encore une fois, tu es dans le monde des BDD relationnelles alors mets en oeuvre la bonne modélisation avec 3 tables que j'ai donnée plus haut !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 16h52   #12
Membre du Club
 
Inscription : juillet 2005
Messages : 287
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 287
Points : 56
Points : 56
Non c'est bien un OR

champ_statut = 0 (au départ)
ajout option lecture seule champ_statut = champ_statut OR 1 (1)
ajout option non supprimable (sans retirer statut lecture seule) champ_statut = champ_statut OR 2 (3)

Effectivement ce n'est normalisé.
Mais c'était une idée pour stocker certaines données, et ce n'est pas réalisable en SQL (merci à lui de me ramener dans le droit chemin)

Merci de tes conseils
richard038 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 18h09   #13
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Testé avec MySQL :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `test`.`machin` (
`statut` INT NOT NULL
) ENGINE = MYISAM ;
 
INSERT INTO machin
VALUES ( 0 );
--> statut = 0
 
UPDATE machin SET statut = statut OR 1;
--> statut = 1
 
UPDATE machin SET statut = statut OR 2;
--> statut = 1
Convaincu maintenant que ton truc ne fonctionne pas ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 15h49   #14
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Je pense que c'est les opérateurs bit a bit qu'il te faut utiliser :
http://dev.mysql.com/doc/refman/5.0/...functions.html

Code SQL :
1
2
3
 
UPDATE machin SET statut = statut | 1;
UPDATE machin SET statut = statut | 2;
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h54.


 
 
 
 
Partenaires

Hébergement Web