首页 > 解决方案 > MySQL按位比较

问题描述

我有一个带有用户表的 mysql,其中包含按位保存的民意调查答案。如何按位找到具有最多或最不常见答案的用户?

+------+---------+--+
| User | Answers |  |
+------+---------+--+
| A    |       1 |  |
| B    |       5 |  |
| C    |      10 |  |
+------+---------+--+

标签: mysqlcomparisonbit-manipulation

解决方案


假设通过“按位引用”,您的意思是您有另一个值,它是您尝试与列匹配的位掩码,Answers这样的事情应该为您做。在这种情况下,我使用 '4' 作为参考位掩码和myTable表的名称..

SELECT User, BIT_COUNT(Answers & 4) AS MatchedBits FROM myTable ORDER BY MatchedBits DESC

这将返回:

+--------+-------------+
| 用户 | 匹配位 |
+--------+-------------+
| 乙| 1 |
| 一个 | 0 |
| C | 0 |
+--------+-------------+

您还可以添加一个LIMIT 1子句来仅获得最高结果,但当然这不会告诉您是否存在多个具有相同位数匹配的最高结果。


推荐阅读