- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一张 table ,里面装满了各种“面具”,例如:
Type Mask1 Mask2 Mask3
0 fff fff ff
1 aff fff ff
2 aff fff 92
3 001 fff 00
基本上,我想查询数据库并查看特定查询是否匹配,例如 a00-111-12。
任何有 f< 的地方/b> (这都是十六进制)我想说有一个匹配。
所以我取值a00-111-12,它应该与第0行和第1行匹配,但不与第2行和第3行匹配,因为在第0行中,所有f 出现,因此与它们进行“与”操作将得到相同的值。但是,AND-ing 不起作用,因为如果使用第 2 行进行测试,Mask3 列值 92 AND 与 12 结果为 12,但我不希望该行匹配。
我发现这是一个很难问的问题,可能无法通过一些 MySQL 查询来实现,但我想避免将整个表导入 PHP,然后从那里找到正确的行。
查询的想法是:
SELECT * FROM TABLE WHERE Mask1 = a00 AND Mask2 = 111 AND ...
但是,需要对 Mask1、2、3 或发送到查询的值执行一些操作。最终目标是从匹配行中获取类型。如果您需要更多信息,请询问。
最佳答案
创建子掩码表以使您的工作更轻松,添加一行
z1 : z2 : z3
0xf : 0xf0 : 0xf00
然后使用以下查询
Select
t.*
from Table t
inner join submasks s
on (
((t.Mask1 & s.z1) = s.z1 || (t.Mask1 & s.z1) = (a00 & s.z1)) &&
((t.Mask1 & s.z2) = s.z2 || (t.Mask1 & s.z2) = (a00 & s.z2)) &&
((t.Mask1 & s.z2) = s.z2 || (t.Mask1 & s.z2) = (a00 & s.z2)) &&
((t.Mask2 & s.z1) = s.z1 || (t.Mask2 & s.z1) = (111 & s.z1)) &&
((t.Mask2 & s.z2) = s.z2 || (t.Mask2 & s.z2) = (111 & s.z2)) &&
((t.Mask2 & s.z2) = s.z2 || (t.Mask2 & s.z2) = (111 & s.z2)) &&
((t.Mask3 & s.z1) = s.z1 || (t.Mask3 & s.z1) = (12 & s.z1)) &&
((t.Mask3 & s.z2) = s.z2 || (t.Mask3 & s.z2) = (12 & s.z2))
)
其工作方式是通过与 z1
执行按位 AND 来比较各个十六进制数字。 , z2
和z2
分别获取 3 位数字中的每一位。
所以
<any value> & z1
将除最后一位之外的所有十六进制数字设置为 0,即 0x123
变成0x003
<any value> & z2
将除倒数第二个之外的所有十六进制数字设置为 0,即 0x123
变成0x020
<any value> & z3
将除倒数第三个之外的所有十六进制数字设置为 0,即 0x123
变成0x100
使用此过滤器,每个数字的测试可以构建为
((mask & filter) = filter) // is the digit f
|| // OR
((mask & filter) = (test & filter)) // is the digit the same.
对 z1
中的每个重复测试, z2
和z3
(即 0x00f
、 0x0f0
和 0xf00
)将结果与 and 条件结合起来,您可以检查掩码的所有 3 个十六进制数字是 f
或确切的测试值。
然后对 Mask2 和 Mask3 重复此操作(但只有 z1,z2,因为 Mask3 是 2 位数字)。
通过对子掩码表使用内连接,结果将仅包含掩码条件为真的表中的值。
更新 - 您可能想要执行select distinct
而不仅仅是select
就好像两个掩码匹配表中的一行,那么将返回 2 个结果。
关于MySql 查询掩码表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17349156/
我是一名优秀的程序员,十分优秀!