Partage
  • Partager sur Facebook
  • Partager sur Twitter

requete SQL avec un LIKE % 8ème rang %...

Sujet résolu
    15 janvier 2018 à 11:23:39

    Bonjour à tous,

    J'ai un soucis au niveau d'une requête.

    J'ai un champs dans ma table qui équivaut à des attributions de droits à mes utilisateurs.

    Ce champs est composer de 32 booléens. 0= pas de droit ; 1 = un droit

    Exemple : un utilisateur 'X', a un code 'XDXKX72' et a un droit '000000010000000101000001100000000'

    Je souhaite faire une requête dans ma table avec tous les utilisateurs ayant le 8 ème droit d'actif.

    J'ai essayé cette requête :

    SELECT `code`,`codepersonnel`,`attrib_droits`
    FROM identification
    WHERE `attrib_droits` LIKE '00000001%'

    Mais elle ne me montre les résultats ayant le 8 ème droit, et n'ayant pas de droit avant celui ci.

    Or dans mes résultats il se peut que des utilisateurs ayant le 8ème droit puisse également avec un 3ème droit ou un 6ème droit. o_O

    Le problème c'est que si je fais LIKE '%1%', SQL va me sortir un résultat faussé car il n'y a pas de restriction au niveau du 8ème droit.

    Avez vous compris mon problème et pouvez vous m'aider ? :euh:

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
    "Je parie qu'on pourrait devenir potes tous les deux. Tu possèdes cette qualité que tout Ablette se doit d'avoir : tu parles peu..."
      15 janvier 2018 à 11:35:56

      WHERE attrib_droits LIKE '_______1%' ?

      Ca aurait été du INT et des masques, tu aurais pu utiliser un truc comme ça : WHERE attrib_droits & (1<<8)

      -
      Edité par julp 15 janvier 2018 à 11:38:01

      • Partager sur Facebook
      • Partager sur Twitter
        15 janvier 2018 à 11:42:39

        Hello Julp :D !

        Olalala je te remercie beaucoup pour ton message effectivement ça fonctionne bien !

        Tu penses que utiliser des INT aurait été plus judicieux ?

        • Partager sur Facebook
        • Partager sur Twitter
        "Je parie qu'on pourrait devenir potes tous les deux. Tu possèdes cette qualité que tout Ablette se doit d'avoir : tu parles peu..."
          15 janvier 2018 à 11:57:16

          Un entier (non-signé) de 32 bits = 4 octets.

          Tes 32 booléens = 32 octets ?

          Et ça aurait été bien plus facile à manipuler via des masques.

          Autre solution d'ailleurs : SUBSTR (WHERE SUBSTR(attrib_droits, 8, 1) = '1'). Pas besoin d'un LIKE.

          -
          Edité par julp 15 janvier 2018 à 12:00:11

          • Partager sur Facebook
          • Partager sur Twitter
            15 janvier 2018 à 12:18:02

            Effectivement ça aurait été plus simple avec des entiers.

            Merci beaucoup du conseil et pour la deuxième solution !

            • Partager sur Facebook
            • Partager sur Twitter
            "Je parie qu'on pourrait devenir potes tous les deux. Tu possèdes cette qualité que tout Ablette se doit d'avoir : tu parles peu..."

            requete SQL avec un LIKE % 8ème rang %...

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown