ugrás a tartalomhoz

MySQL decimális-bináris konverzió

csigafattyu · 2011. Már. 6. (V), 15.41
Üdvözletem mindenkinek, új vagyok, jöttem hülyeségeket kérdezni. :)

Van egy user táblám, amiben egy integer mező tárolja a júzer jogosultságait. Az integer bitjei jelzik az egyes jogokat (1-0). Így egyszerűbbnek tűnt implementálni, mert amúgy vagy tizennyolc plusz mező kellene.

Igen ám, de lehet-e a MySQL-től egy integer értéket bináris formában lekérni? Mármint pl: 01010011. Ugyanis addig rendben van, hogy lekérdezem és PHP-ban decbin() segítségével átkonvertálom, de most WHERE-rel kéne szűrnöm.

üdv
Csiga
 
1

A CONV() függvénnyel tudsz

Joó Ádám · 2011. Már. 6. (V), 17.00
A CONV() függvénnyel tudsz átváltani számrendszerek közt. Utána SUBSTRING()-gel tudod megvizsgálni a kérdéses helyiértéket.

Összességében sokkal többet vesztesz komplexitásban és erőforrásigényben, mint amit nyersz az elenyésző helymegtakarítással. A relációs adatbázis lényegét veszted el vele. Én azt javaslom, tárold el mezőnként, ahogy illik.
2

Köszi

csigafattyu · 2011. Már. 6. (V), 19.13
Köszi. Igazából a jogosultságok csak egyszer kellenek, amikor belép az ürge, aztán úgy marad legalább lét hétig, megy minden sessionbe. Ezért egyszerűbb így. Még egyszer köszi!
3

SET?

janoszen · 2011. Már. 6. (V), 20.09
Van ám erre a célra egy MySQL adattípus, úgy hívják, SET. Ha pedig normalizáltat akarsz, akkor kapcsolótábla. A bináris helyiérték vizsgálgatás nem lesz túl gyors.
4

Bitwise functions

bonga · 2011. Már. 7. (H), 09.47
Ha már maradsz ennél a tárolási módnál, miért nem használod a bitszintű operátorokat? Pl. azon rekordok, ahol a harmadik bit nulla:
SELECT * FROM tabla WHERE mezo & 4 = 0
Bitszintű operátorok
5

orulok hogy azert valakinek

Tyrael · 2011. Már. 7. (H), 12.55
orulok hogy azert valakinek eszebe jutott, mar kezdtem ketsegbeesni, hogy ezt a lehetoseget senki nem emliti meg.

ps: azt azert erdemes tudni ez a megoldas lassabb lehet, mint a SET-es (a kulon oszlopok felvitelenel nem biztos, mert az indexek számossága(cardinality) annyira alacsony lenne, hogy nem lenne gyorsabb a kereses mint 1 full table scan.)

a mysql SET ugyanugy egy bitmap implementacio belul, csak bizonyos esetekben tud indexet is hasznalni, tehat bizonyos esetekben lehet gyorsabb mint a sajat bitmap implementacio:
http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html
http://dev.mysql.com/doc/refman/5.1/en/set.html

talan a fejleszto szamara lehet kenyelmesebb, hogy nem bitekkel kell buveszkedni kozvetlenul.

Tyrael
6

Mert lamer vagyok az SQL-hez,

csigafattyu · 2011. Már. 7. (H), 15.20
Mert lamer vagyok az SQL-hez, azért. :) De most már ezt is tudom, köszönöm.