我想優化這個MySQL選擇查詢,但我不知道如何閱讀此。想知道是否有人可以解釋這個查詢在WHERE子句中做了什麼。我如何閱讀這個mysql select查詢?
SELECT `id`, `size`, `download`, `mirror1`, `mirror2`, `mirror3`
FROM `entries`
WHERE (`flags` & '3') = '0';
我想優化這個MySQL選擇查詢,但我不知道如何閱讀此。想知道是否有人可以解釋這個查詢在WHERE子句中做了什麼。我如何閱讀這個mysql select查詢?
SELECT `id`, `size`, `download`, `mirror1`, `mirror2`, `mirror3`
FROM `entries`
WHERE (`flags` & '3') = '0';
它做的標誌按位AND
運營商,在這裏讀到它: http://en.wikipedia.org/wiki/Bitwise_AND#AND
3二進制是11,所以它的檢查,看是否標誌的兩個低位未設置(例如,它們'0'),因爲根據where子句,AND運算符的結果必須爲0。
例子(假設標誌具有以下值):
Ex 1: 11101000 <-- WHERE clause would be true, since lower two bits are 0
Ex 2: 11111010 <-- WHERE clause would be false, since lower two bits are NOT 0
+1可能值得注意的是,有一個隱含的「3」從字符到數字值3(以及類似的「0」)的轉換。 – 2013-03-16 19:10:21
@馬克 - 謝謝,好點 – dcp 2013-03-16 19:10:58
我假設你的目標在&
。這是一個bitwise AND
。
它是如何工作良好的解釋可以在此wikipedia article找到:
的逐位AND採用相同長度的兩個二進制表示和 執行邏輯與操作上的每對相應比特。 如果第一位是1,第二位 位是1,那麼每個位置的結果是1;否則,結果爲0.在這裏,我們執行兩位的 乘法;即,1×0 = 0和1×1 = 1。 例如:
0101 (decimal 5)
AND 0011 (decimal 3)
= 0001 (decimal 1)
這種技術通常使用的狀態,用戶的權限或類似的東西存儲在一個非常緊湊的形式。我假設3
兩種某些國家對查詢檢查其中:
00000000 <- TRUE
00000001 <- FALSE
00000010 <- FALSE
00000011 <- FALSE
你能確保它實際上是在「WHERE(flags
&‘3’)=‘0’;」?它會是「哪裏(flags
& 3)= 0;」這更有意義?
凱文
選擇ID,大小,下載,mirror1,mirror2並從條目表,其中標誌與3作與運算二進制數等於零mirror3字段。
標誌通常存儲爲轉換爲數字進行存儲的位。由於標誌通常處於打開狀態或關閉狀態,因此這對應於二進制0和1.因此,0可以關閉,1可以打開。因此,四個標誌的序列可以用二進制表示爲:0 0 1 1,(等於小數點3)(off,off,on,on)。
爲了滿足條件, 3(二進制11)給出零,數字必須有兩個最低位爲零,所以(以二進制):1 1 0 0或10100等將返回零,因爲如果兩個輸入均爲1,則AND僅返回1
你想應用按位或簡單串接字符串 – 2013-03-16 19:04:07