Toon posts:

[mysql] query voor rechtensysteem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik hanteer een rechtensysteem volgends de reeks 1, 2, 4, 8 ,16 etc waarmee dus alle mogelijke combinaties te maken zijn.

Maar nu ben ik op zoek naar een query om in 1 keer alle records op te kunnen halen waarbij het rechtengetal bijv. 32 bevat.
Nu worden alle records nog opgehaald en daarna bekeken, maar bij veel records is dat natuurlijk geen geweldige oplossing...

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

having sum(rechten) = 32

zoiets :?

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Even wat uitleg:
Ik heb bijvoorbeeld records met de rechten waardes: 4, 17 , 34, 68 , 113
Nu wil ik alle records hebben waarin het getal 16 verwerkt moet zitten (opbouw uit reeks 1, 2, 4, 8 etc)
Dat zou dus geven 17 (16+1) , 113 (64+32+16+1)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Bitwise operators gebruiken
code:
1
2
SELECT ....
WHERE rechten_veld & 32


http://www.mysql.com/doc/en/Bit_functions.html

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

[EDIT] Bovenstaande heeft dit ook al heel kort gezegd.

hmmmm ik ga er even van uit dat je een veld "rechten" hebt met daarin zo'n getal verwerkt. Dan kan je het volgende doen.

SELECT *
FROM gebruikers
WHERE 16 = 16 & rechten

FF ter verduidelijking. rechten bevat bijvoorbeeld 17 dan zal de bit operatie "16 & rechten" opmerken dat de bit 16 geset is en deze retourneren. Als het veld rechten gelijk is aan 19 dan zou het bit 16 niet geset zijn en zou de gelijkheid niet mogelijk zijn.

Bit operaties met & werken als volgt:
8 = 1000
Als de rechten tabel gelijk is aan 10 dan heb je in binair 1010
De operatie vergelijkt dan 1000 met 1010 en merkt dat enkel de bit 8 geset is.

Andere opraties zijn natuurlijk ook mogelijk maar dit is degene die je nodig had lijkt me. Voor meer info zou ik de mysql manual lezen (http://www.mysql.com/doc/en/Bit_functions.html).

[ Voor 6% gewijzigd door Verwijderd op 16-01-2003 14:25 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

FF ter verduidelijking. rechten bevat bijvoorbeeld 17 dan zal de bit operatie "16 & rechten" opmerken dat de bit 16 geset is en deze retourneren. Als het veld rechten gelijk is aan 19 dan zou het bit 16 niet geset zijn en zou de gelijkheid niet mogelijk zijn.
Die "16 = " is overbodig, aangezien je over enkele bits praat. Als 1 bit geset is in de integer waarop je test:
code:
1
select 16 & 17

dan geeft hij "true" (niet 0) terug, anders "false" (wel 0). Wanneer je gaat checken op meerdere bits tegelijk moet je idd wel kijken of de uitkomst gelijk is aan het bitfield waarop je checkt.

Overigens bestrijd ik wederom de 1+2+4 notatie. Het is 1 | 2 | 4. Waarom? Omdat 8 + 8 =16 en 8 | 8 = 8.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
bedankt, het is nu netjes gefixt :)
Pagina: 1