我有一個類別表:SQL存儲過程和位運算符
id;description;special
----------------------
1;Spares;TRUE
2;Accessories;TRUE
4;Consumables;TRUE
8;Services;TRUE
11;Printer;FALSE
12;Monitor;FALSE
13;Other;FALSE
特殊字段指定特殊類別具有固定ID和不能被刪除,也不修改。我已經爲這些分配了按位或可用的ID。
然後我有項目,每個項目屬於一個類別(1:n的關係)。
現在,我想寫入的存儲過程需要含有id的OR-ED組合的輸入參數:
1 I want spare parts
2 I want accessories
4 I want consumables
**5 I want consumables AND spare parts**
等
如果該參數爲NULL,則希望每個項目,無論其類別。
這是很容易的,說的參數被稱爲_or_category
,那麼WHERE
條款可能是這樣的:
SELECT
*
FROM
items I
JOIN
categories C ON (C.id = I.category)
WHERE
(_or_category IS NULL) OR (C.special = TRUE AND C.id | _or_categoria = _or_categoria)
;
第一個問題: * 編輯:對不起,這不是一個問題,因爲我在WHERE子句中有C.special = TRUE。 * 類別12可以「看到」爲id = 8或4,因此如果我只想選擇易損件,我也可以看到顯示器!
第二個問題: 我不知道如何指定何時需要所有不是服務的項目(cat:8)。
如果要逐位這些,爲什麼你用11,12和13作爲ID?這不應該是2的權力嗎? – LJM 2011-06-06 14:59:41
我只想按位分類的特殊類別,而不是所有其他。 – vulkanino 2011-06-06 15:01:04
如果你使用按位,他們需要互斥......所以你不能有重疊的可能性。現在,打印機看起來像一個耗材服務。您需要2個字節才能正確表示。 0x01 - 備用到0x40其他 – FlyingStreudel 2011-06-06 15:53:58