Heim >Datenbank >MySQL-Tutorial >Einführung von MySQL-Bitoperationen zur Vereinfachung von Eins-zu-Viele-Beziehungen

Einführung von MySQL-Bitoperationen zur Vereinfachung von Eins-zu-Viele-Beziehungen

coldplay.xixi
coldplay.xixinach vorne
2020-12-18 09:21:263240Durchsuche

MySQL-TutorialIn der Spalte werden Bitoperationen zur Vereinfachung von Eins-zu-vielen-Beziehungen vorgestellt & : Bitweises UND, die Bits, die beide gleichzeitig 1 sind, werden auf 1 gesetzt.
|. : Bitweises ODER, wenn ein Binärbit 1 ist, dann ist es 1.
^ : Bitweises XOR, die Binärzahl des entsprechenden Wenn die Zahlen unterschiedlich sind, ist das Ergebnis des entsprechenden Bits 1. Wenn beide entsprechenden Bits 0 oder beide 1 sind, ist das Ergebnis des entsprechenden Bits 0.

Einführung von MySQL-Bitoperationen zur Vereinfachung von Eins-zu-Viele-BeziehungenPrinzip

$a = 6 转化为2进制为 110
$b = 3 转化为2进制为 11
$a & $b即是 110 与 11
将$a和$b中都为1的位设为1,位数不够的补0.即110 与 011
运算结果010,转化为十进制结果为2
AnwendungsszenarioJede Attraktion enthält viele Attribute, wie zum Beispiel den Monat, der für den Tourismus geeignet ist:

  1. Es besteht darin, einen varchar Feld, jeder Monat wird durch ein spezielles Symbol getrennt und gespeichert, zum Beispiel: "1,2,22,65,7"
  2. Das Erstellen einer relationalen Tabelle ist nicht möglich Hier getan: Verwenden Sie Zahlen von 1 bis 12, um den Monat darzustellen, aber verwenden Sie 1, 2, 4, 8, 16, 32, 64, 128, 512, 1024, 2048, 4096, um ihn darzustellen Es gibt mehrere Monate, die kombiniert und addiert und dann als Wert gespeichert werden können.
    Zum Beispiel können Sie in den Monaten 1, 10 und 12 den Wert 1+512+4096=4609, 4096, speichern.
  3. & : 按位与,二进制位同时都为1的位设为1。
    | :  按位或,二进制位有一个位为1就为1.
    ^ : 按位异或,对应位的二进制数不同时,对应位的结果才为1;如果两个对应位数都为0或者都为1,则对应位的结果为0。

    原理

    -- 添加一个分类 用 “|”
    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"
    2. 建立一个关系表,在这里不能使用1-12的数字来表示月份,而是使用1,2,4,8,16,32,64,128,512,1024,2048,4096来表示,如果是多个月份,可以相互组合相加,之后存储为一个值。
      比如 1,10,12月份,就可以存储1+512+4096=4609Diese Technik eignet sich für Eins-zu-viele-Szenarien mit wenigen Attributen. Wenn zu viele vorhanden sind, wird empfohlen, die Beziehungstabelle auszuprobieren. Zu den häufig verwendeten Attributen gehören: Monat, Nachrichtenerinnerungstyp, verschiedene eingeschränkte Typkombinationen usw.

    Tipps: rrreee

Das obige ist der detaillierte Inhalt vonEinführung von MySQL-Bitoperationen zur Vereinfachung von Eins-zu-Viele-Beziehungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jianshu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen