IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

ET logique de 2 champs tinyblob dont le contenu est un binaire


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 61
    Points
    61
    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.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    montre nous ta requête complète s'il te plaît.
    une réponse vous a permis d'avancer ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 61
    Points
    61
    Par défaut
    ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT b && gridb 
    FROM GRILLE

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    ta requête n'est pas bonne,

    tu veut afficher les deux colonnes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?)
    une réponse vous a permis d'avancer ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 61
    Points
    61
    Par défaut
    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

  6. #6
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    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...

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En l'occurrence, ici, pour faire le ET logique, il suffit de vérifier si les deux chaînes sont égales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 61
    Points
    61
    Par défaut
    @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

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 61
    Points
    61
    Par défaut
    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

  10. #10
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    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...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 61
    Points
    61
    Par défaut
    Je trouve cela un peu lourd comme requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #12
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 61
    Points
    61
    Par défaut
    @ericd69

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

    et donne moi des nouvelles

  14. #14
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    as tu au moins essayé d'appliquer:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Ceci fonctionne presque ( Il manque les zéros en entête) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CONV(CONV(b,2,10) & CONV(gridb,2,10),10,2) FROM GRILLE

  16. #16
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    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...

  17. #17
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  18. #18
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    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 ?

  19. #19
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    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...

  20. #20
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    J'ai fait quelques tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CONV('1000',2,2) & CONV('0100',2,2)
    -> 96 !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. value d'un champ texte dont le name est sous forme de tableau
    Par manu_71 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 19/04/2012, 17h36
  2. Détecter les cellules dont le contenu est souligné
    Par Dakuan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/07/2008, 12h32
  3. Réponses: 7
    Dernier message: 27/12/2007, 09h36
  4. [XSLT] des noeuds dont le contenu est forcément différent
    Par DelphLaga dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/10/2006, 19h06
  5. Fenêtre dont le contenu est dynamique (lié a un menu)..
    Par fredrider dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/10/2006, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo