im trying to use MySQL bitwise operations for my query and i have this example:
table1
id ptid
1 3
2 20
3 66
4 6
table2
id types
1 music
2 art
4 pictures
8 video
16 art2
32 actor
64 movies
128 ..
...
now, the id = 3
from table1
is '66', witch means that it has 64 or movies
and 2 or art
but
doesn't he also have 32 or actor
twice and 2 or art
??
hope you see where my confusion is. How do i control what result i want back. In this case i want 64 or movies
and 2 or art
.
But sometimes i want three id's
from table2
to belong to an id
from table1
any ideas?
Thanks
Using bitwise OR
The following query returns all the items from table 2 in 66
:
SELECT *
FROM table2
WHERE id | 66 = 66
But 32 + 32 = 64?
Though 32 + 32 = 64, it doesn't affect us.
Here's 64 in binary:
01000000
Here's 32 in binary:
00100000
Here's 2 in binary:
00000010
It's the position of the 1 that we use in this case, not the value. There won't be two of anything. Each flag is either on or off.
Here's 66 in binary. Notice that 64 and 2 are turned on, not 32:
01000010
Using bitwise AND instead of OR
Another way to write the query is with bitwise AND like this:
SELECT *
FROM table
WHERE id & 66 <> 0
Since 0 = false
to MySQL, it can be further abbreviated like this:
SELECT *
FROM table
WHERE id & 66
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With