Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/12/2012, 21h10   #1
enibris
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 107
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 107
Points : 25
Points : 25
Par défaut ET logique de 2 champs tinyblob dont le contenu est un binaire

Bonjour,

b et gridb sont 2 champ tinyblob
exple du contenu de ces 2 champs:

b gridb
0100 0100
0010 0100
1000 0100
0100 0100

Je voudrais faire un ET, j'ai essaye comme cela ( b && gridb), mais le résultat est incohérent

Voici le résultat que je devrais obtenir

b gridb (b et gridb)
0100 0100 0100
0010 0100 0000
1000 0100 0000
0010 0010 0010


Merci pour votre aide.
enibris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 21h27   #2
Exia93
Membre Expert
 
Homme
Étudiant
Inscription : avril 2012
Messages : 604
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2012
Messages : 604
Points : 1 055
Points : 1 055
Bonsoir,

montre nous ta requête complète s'il te plaît.
Exia93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 21h30   #3
enibris
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 107
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 107
Points : 25
Points : 25
ma requete :
Code :
1
2
SELECT b && gridb 
FROM GRILLE
enibris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 21h39   #4
Exia93
Membre Expert
 
Homme
Étudiant
Inscription : avril 2012
Messages : 604
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2012
Messages : 604
Points : 1 055
Points : 1 055
ta requête n'est pas bonne,

tu veut afficher les deux colonnes ?
Code :
SELECT b,  gridb FROM GRILLE
Que veut tu que ta requête retourne comme résultat exactement ? ( les couples b et gridb qui ont la même valeur même sur des lignes différentes ?)
Exia93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 03h24   #5
enibris
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 107
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 107
Points : 25
Points : 25
Non, je veux faire un ET logique entre B et gridb

b contient
0100
0010
1000
0010


gridb contient
0100
0100
0100
0010

b && gridb devrait etre ( marche tres bien en php )
0100
0000
0000
0010
enibris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 07h09   #6
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
salut,

non si tu fais && ou & en php c'est pas du tout pareil...

le et logique c'est & car && considère à 1 n'importe quelle valeur non null ou différente de 0, idem pour || par exemple avec des valeur binaires:
0100 && 0010 = 0001 alors que 0100 & 0010 = 0000
0100 || 0010 = 0001 alors que 0100| 0010 = 0110

c'est la différence entre le "et, ou, etc... logiques" (comme il l'appellent) qui sert à faire des test dans un if et les fonctions logiques équivalentes en mode "bitwise" (bit à bit)

si tu tiens vraies fonctions logiques c'est les fonctions bitwise...

dans mysql ç prend des bigint en entrée

après ce que tu utilises pour stocker tes valeur c'est quoi? la chaine de caractères équivalent au binaire? le binaire sous forme hexa réelle ou sa représentation sous forme de chaine en hexa?

tu vois rien à voir en terme de traitement selon le cas
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 10h39   #7
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 : 13 659
Points : 25 563
Points : 25 563
Envoyer un message via MSN à CinePhil
En l'occurrence, ici, pour faire le ET logique, il suffit de vérifier si les deux chaînes sont égales :
Code :
1
2
3
4
5
6
SELECT b,  gridb,
	CASE
		WHEN b = gridb THEN b
		ELSE '0000'
	END AS resultat_ET
FROM GRILLE
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
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 la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 17h12   #8
enibris
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 107
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 107
Points : 25
Points : 25
@ericd69

je le stocke avec une chaine de 0,1 en tinyblob
visuellement dans phpadmin on voit 00110110000101010100

@CinePhil

la j'ai pris un exple sinon je compare cela 00110110000101010100 a cela 01000001101011100010
enibris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 17h34   #9
enibris
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 107
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 107
Points : 25
Points : 25
je cherche a faire cela en sql -> 0100 & 0010 = 0000 donc c'est bien le &

quand je fais cela j'obtient un resultat bizarre -> 1000 & 0100 = 96
dans ce cas il devrait etre 0
enibris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 18h01   #10
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
faut que tu fasses du transtypage ou que tu fasses une requête préparée pour manipuler ce texte alors
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 18h37   #11
enibris
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 107
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 107
Points : 25
Points : 25
Je trouve cela un peu lourd comme requete

Code :
1
2
3
4
5
6
7
8
9
 
SELECT b,gridb
,concat (
SUBSTRING(b,1,1) & SUBSTRING(gridb,1,1),
SUBSTRING(b,2,1) & SUBSTRING(gridb,2,1),
SUBSTRING(b,3,1) & SUBSTRING(gridb,3,1),
SUBSTRING(b,3,1) & SUBSTRING(gridb,4,1)
)
FROM GRILLE
Si vous avez une meilleure proposition, elle sera la bienvenue
Merci
enibris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 20h17   #12
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
un exemple:
Code :
SELECT conv('0101',2,2)&7;
qui donne bien 5 soit 0101&0111=0101=5
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 20h31   #13
enibris
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 107
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 107
Points : 25
Points : 25
@ericd69

Cree une table avec 2 champ b, gridb (tinyblob)
rentre les valeurs
b=1000
gridb=0100

et donne moi des nouvelles
enibris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 21h40   #14
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
as tu au moins essayé d'appliquer:
Code sql :
1
2
SELECT conv(b,2,2) & conv(gridb,2,2) 
FROM GRILLE
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 10h15   #15
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
Ceci fonctionne presque ( Il manque les zéros en entête) :
Code :
SELECT CONV(CONV(b,2,10) & CONV(gridb,2,10),10,2) FROM GRILLE
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 10h37   #16
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
pourquoi faire un conversion en base 10? ça sert à rien...


pour combler il suffit d'utiliser lpad...

sinon conv et les fonctions logiques sont limités à 64 bits maxi pour info
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 11h08   #17
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 : 13 659
Points : 25 563
Points : 25 563
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par enibris Voir le message
@CinePhil

la j'ai pris un exple sinon je compare cela 00110110000101010100 a cela 01000001101011100010
Et alors ?
D'après ce que je comprends de ton exemple donné plus haut, tu dois obtenir une série de zéro si les deux colonnes n'ont pas la même valeur, non ?
As-tu essayé ma requête ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
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 la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 11h36   #18
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
Citation:
Envoyé par ericd69 Voir le message
pourquoi faire une conversion en base 10? ça sert à rien...
En tout cas, ça a l'air de fonctionner...
Et convertir de base 2 en base 2 c'est censé servir à quoi ?
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 12h11   #19
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
eviter ta conversion finale lol

tu pars de la base 2 et tu ne cherches pas à en sortir, on triture du binaire, le seul problème étant au départ de partir de la forme texte pour en faire un nombre en faisant comprendre à mysql que c'est du binaire et pas du décimal... bien sur que ton truc marche tu fais juste une conversion en plus pour rien


tu peux mettre 2,2 ou 2,10 c'est pareil pour le calcul mais le premier lui fait afficher du binaire l'autre pas c'est la différence...

__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 12h48   #20
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
J'ai fait quelques tests :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `grille` (
  `idgrille` int(11) NOT NULL,
  `b` tinyblob,
  `gridb` tinyblob,
  PRIMARY KEY (`idgrille`)
); 
 
INSERT INTO `grille`
(`idgrille`,
`b`,
`gridb`)
VALUES
(1,'0100','0100'),
(2,'1000','0100')
;
 
SELECT b+0, gridb+0,CONV(b,2,10),CONV(gridb,2,10),CONV(b,2,2),CONV(gridb,2,2),CONV(b,2,2) & CONV(gridb,2,2),  CONV(CONV(b,2,10) & CONV(gridb,2,10),10,2) 
FROM GRILLE

Citation:
b+0 | gridb+0 | CONV(b,2,10) | CONV(gridb,2,10) | CONV(b,2,2) | CONV(gridb,2,2) | CONV(b,2,2) & CONV(gridb,2,2) | CONV(CONV(b,2,10) & CONV(gridb,2,10),10,2)
100 | 100 | 4 | 4 | 100 | 100 | 100 | 100
1000 | 100 | 8 | 4 | 1000 | 100 | 96 | 0
-> CONV(b,2,2) ne fonctionne pas !

Ou plus simple :
Code :
SELECT CONV('1000',2,2) & CONV('0100',2,2)
-> 96 !!!
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h40.


 
 
 
 
Partenaires

Hébergement Web