mysql 튜토리얼이 칼럼에서는 일대다 관계를 단순화하기 위한 비트 연산을 소개합니다
권장(무료): mysql
Syntax
& : 비트별 AND, 동시에 1인 비트는 1로 설정됩니다. | :
비트별 OR, 이진수 비트가 1이면 1입니다.^ :
비트별 XOR, 해당하는 이진수 bit 숫자가 다른 경우 해당 비트의 결과는 1이고, 해당 비트가 모두 0이거나 둘 다 1인 경우 해당 비트의 결과는 0입니다. & :
按位与,二进制位同时都为1的位设为1。| :
按位或,二进制位有一个位为1就为1.^ :
按位异或,对应位的二进制数不同时,对应位的结果才为1;如果两个对应位数都为0或者都为1,则对应位的结果为0。
原理
$a = 6 转化为2进制为 110 $b = 3 转化为2进制为 11 $a & $b即是 110 与 11 将$a和$b中都为1的位设为1,位数不够的补0.即110 与 011 运算结果010,转化为十进制结果为2
应用场景
每个景点包含很多属性,例如适合旅游的月份,我们一般的做法可能有两种:
varchar
字段,每个月份之间用一个特殊符号分隔保存,例如:"1,2,22,65,7"
1,2,4,8,16,32,64,128,512,1024,2048,4096
来表示,如果是多个月份,可以相互组合相加,之后存储为一个值。1+512+4096=4609
응용 시나리오-- 添加一个分类 用 “|” SELECT (4|2|1); --- = 7 -- 去掉一个分类,用“^” SELECT 7 ^ 1; -- 当我们需要查询某个月份的景点时,例如查询3月份的景点,可使用以下语句: SELECT * FROM `spots` WHERE `month` & 4 = 4; -- 当设置某个景点适合某个月份时,例如设置4325的景点适合2月份,可使用下面的语句: UPDATE `spots` SET `month` = `month` | 2 WHERE `id` = 4325 -- 当取消设置某个景点的月份时,可使用下面的语句: UPDATE `spots` SET` month` = `month` ^ 2 WHERE`id`= 4325 -- 查询同时适合多个月份的数据,例如需要查询设置了11,12,1月份的景点,将其三个月份对应的数值加起来,结果为6145,然后使用这个数值进行查询: SELECT * FROM `spots` WHERE `month` & 6145 = 6145 -- 查询只要适合,1,11,12月份其中一个月份的景点就行 SELECT * FROM `spots` WHERE (`month` & 4096 = 4096) or (`month` & 2048 = 2048) or (`month` & 1 = 1)로그인 후 복사
각 명소에는 관광에 적합한 달과 같은 많은 속성이 포함되어 있습니다. 우리의 일반적인 접근 방식은 두 가지일 수 있습니다. "1,2,22,65,7"
1, 2, 4, 8, 16, 32, 64, 128, 512, 1024, 2048, 4096
을 사용하여 표시합니다. 여러 달을 결합하여 서로 추가한 다음 값으로 저장할 수 있습니다. 1+512+4096=4609
, 4096 값을 저장할 수 있습니다. 🎜🎜🎜이 기술🎜은 속성이 거의 없는 일대다🎜 시나리오에 적합합니다. 속성이 너무 많으면 관계 테이블을 사용해 보는 것이 좋습니다. 일반적으로 사용되는 속성에는 월, 메시지 알림 유형, 다양한 제한된 유형 조합 등이 포함됩니다. 🎜🎜🎜🎜팁: 🎜🎜rrreee위 내용은 일대다 관계를 단순화하는 Mysql 비트 연산 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!