Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 692
Patrioticcow Avatar asked Dec 01 '22 06:12

Patrioticcow


1 Answers

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
like image 194
Marcus Adams Avatar answered Dec 06 '22 04:12

Marcus Adams