Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 26
  1. #1
    Nouveau Membre du Club
    Inscrit en
    août 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 123
    Points : 35
    Points
    35

    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 Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 764
    Points : 1 374
    Points
    1 374

    Par défaut

    Bonsoir,

    montre nous ta requête complète s'il te plaît.

  3. #3
    Nouveau Membre du Club
    Inscrit en
    août 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 123
    Points : 35
    Points
    35

    Par défaut

    ma requete :
    Code :
    1
    2
    SELECT b && gridb 
    FROM GRILLE

  4. #4
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 764
    Points : 1 374
    Points
    1 374

    Par défaut

    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 ?)

  5. #5
    Nouveau Membre du Club
    Inscrit en
    août 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 123
    Points : 35
    Points
    35

    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
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    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 897
    Points : 3 207
    Points
    3 207

    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 820
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 820
    Points : 24 808
    Points
    24 808

    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 :
    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 !

  8. #8
    Nouveau Membre du Club
    Inscrit en
    août 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 123
    Points : 35
    Points
    35

    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
    Nouveau Membre du Club
    Inscrit en
    août 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 123
    Points : 35
    Points
    35

    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
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    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 897
    Points : 3 207
    Points
    3 207

    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
    Nouveau Membre du Club
    Inscrit en
    août 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 123
    Points : 35
    Points
    35

    Par défaut

    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

  12. #12
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    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 897
    Points : 3 207
    Points
    3 207

    Par défaut

    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...

  13. #13
    Nouveau Membre du Club
    Inscrit en
    août 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 123
    Points : 35
    Points
    35

    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
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    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 897
    Points : 3 207
    Points
    3 207

    Par défaut

    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...

  15. #15
    Membre chevronné
    Homme Profil pro Frédéric
    Inscrit en
    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 : 612
    Points
    612

    Par défaut

    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

  16. #16
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    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 897
    Points : 3 207
    Points
    3 207

    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 820
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 820
    Points : 24 808
    Points
    24 808

    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 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 !

  18. #18
    Membre chevronné
    Homme Profil pro Frédéric
    Inscrit en
    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 : 612
    Points
    612

    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
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    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 897
    Points : 3 207
    Points
    3 207

    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 chevronné
    Homme Profil pro Frédéric
    Inscrit en
    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 : 612
    Points
    612

    Par défaut

    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

    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 !!!

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •