Search code examples
phpmysqlbitwise-operators

how to use MySQL bitwise operations in php?


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


Solution

  • 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