如何在PHP中使用MySQL按位运算?

Pat*_*cow 4 php mysql bitwise-operators

我试图使用MySQL按位运算我的查询,我有这个例子:

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    ..
...
Run Code Online (Sandbox Code Playgroud)

现在,id = 3table1'66',女巫意味着它有64 or movies2 or art

不是他也有32 or actor两次而且2 or art??

希望你看到我的困惑在哪里.我如何控制我想要的结果.在这种情况下,我想要64 or movies2 or art.

但有时我要三id'stable2属于一个idtable1

有任何想法吗?

谢谢

Mar*_*ams 11

使用按位OR

以下查询返回表2中的所有项66:

SELECT *
FROM table2
WHERE id | 66 = 66
Run Code Online (Sandbox Code Playgroud)

但是32 + 32 = 64?

虽然32 + 32 = 64,但它并不影响我们.

这是二进制的64:

01000000
Run Code Online (Sandbox Code Playgroud)

这是二进制的32:

00100000
Run Code Online (Sandbox Code Playgroud)

这里是二进制的2:

00000010
Run Code Online (Sandbox Code Playgroud)

这是我们在这种情况下使用的1的位置,而不是值.不会有两件事.每个标志都打开或关闭.

这是二进制的66.请注意,64和2已打开,而不是32:

01000010
Run Code Online (Sandbox Code Playgroud)

使用按位AND而不是OR

编写查询的另一种方法是使用按位AND,如下所示:

SELECT *
FROM table
WHERE id & 66 <> 0
Run Code Online (Sandbox Code Playgroud)

0 = falseMySQL到它,可以进一步缩写如下:

SELECT *
FROM table
WHERE id & 66
Run Code Online (Sandbox Code Playgroud)