> 데이터 베이스 > MySQL 튜토리얼 > 일대다 관계를 단순화하는 Mysql 비트 연산 소개

일대다 관계를 단순화하는 Mysql 비트 연산 소개

coldplay.xixi
풀어 주다: 2020-12-18 09:21:26
앞으로
3245명이 탐색했습니다.

mysql 튜토리얼이 칼럼에서는 일대다 관계를 단순화하기 위한 비트 연산을 소개합니다

일대다 관계를 단순화하는 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
로그인 후 복사

应用场景

每个景点包含很多属性,例如适合旅游的月份,我们一般的做法可能有两种:

  1. 是增加一个varchar字段,每个月份之间用一个特殊符号分隔保存,例如:"1,2,22,65,7"
  2. 建立一个关系表,在这里不能使用1-12的数字来表示月份,而是使用1,2,4,8,16,32,64,128,512,1024,2048,4096来表示,如果是多个月份,可以相互组合相加,之后存储为一个值。
    比如 1,10,12月份,就可以存储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. varchar 필드에서 각 월은 특수 기호로 구분되어 저장됩니다. 예: "1,2,22,65,7"

  • 관계형 테이블 생성은 다음과 같습니다. done here 1부터 12까지의 숫자를 사용하여 월을 표시하고, 1, 2, 4, 8, 16, 32, 64, 128, 512, 1024, 2048, 4096을 사용하여 표시합니다. 여러 달을 결합하여 서로 추가한 다음 값으로 저장할 수 있습니다.
    예를 들어 1, 10, 12월에는 1+512+4096=4609, 4096 값을 저장할 수 있습니다. 🎜🎜🎜이 기술🎜은 속성이 거의 없는 일대다🎜 시나리오에 적합합니다. 속성이 너무 많으면 관계 테이블을 사용해 보는 것이 좋습니다. 일반적으로 사용되는 속성에는 월, 메시지 알림 유형, 다양한 제한된 유형 조합 등이 포함됩니다. 🎜🎜🎜🎜팁: 🎜🎜rrreee
  • 위 내용은 일대다 관계를 단순화하는 Mysql 비트 연산 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:jianshu.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    최신 이슈
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿