der*_*ert 7 mysql select integer bit
我必须在发布表中执行选择查询,其中设置了整数的特定位.整数表示位掩码中的一组类别:例如
1 => health
2 => marketing
3 => personal
4 => music
5 => video
6 => design
7 => fashion
8 => ......
Run Code Online (Sandbox Code Playgroud)
数据示例:
id | categories | title
1 | 11 | bla bla
2 | 48 | blabla, too
Run Code Online (Sandbox Code Playgroud)
我需要一个mysql查询来选择标记为特定类别的帖子.让我们说"所有视频发布"这意味着我需要一个结果集的帖子,其中设置了catgories列的第5位(例如16,17,48 ....)
SELECT * FROM postings WHERE ....????
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?
Mar*_*ams 12
您可以使用这样的按位运算符.对于视频(第5位):
WHERE categories & 16 = 16
Run Code Online (Sandbox Code Playgroud)
16使用以下值替换每个位的值:
1 = 1
2 = 2
3 = 4
4 = 8
5 = 16
6 = 32
7 = 64
8 = 128
Run Code Online (Sandbox Code Playgroud)
这从最低位到最高位,这与大多数程序员的想法相反.他们也从零开始.
怎么样
SELECT * FROM postings WHERE (categories & 16) > 0; -- 16 is 5th bit over
Run Code Online (Sandbox Code Playgroud)
这样做的一个问题是您可能不会命中索引,因此如果数据量很大,您可能会遇到性能问题。
某些数据库(例如 PostgreSQL)允许您在表达式上定义索引,如下所示。我不确定mySQL是否有这个功能。如果这很重要,您可能需要考虑将它们分解为单独的布尔列或新表。