2013-08-20 63 views
0

是否有可能在庫MySQLi在同一個查詢執行兩個位操作,以一列?在一個MySQLi查詢中的列上執行兩個按位操作?

我有一個名爲狀態欄,這列擁有各種不同的標誌,從1到64(目前,這可能會增加)。在一個查詢中,我想清除我知道設置的第一個標誌,然後設置最後一個標誌,其狀態我不知道。我知道我需要執行的操作,在第一種情況,XOR,並在最後一個的OR,但我可以在一個查詢一舉兩得?

起初,我以爲我可以用一個CASE像下面這個例子:

UPDATE products 
SET pStatus = CASE pId 
    WHEN 66 THEN pStatus^1 
    WHEN 66 THEN pStatus | 64 
END 
WHERE pId IN (66); 

然而,只是運行的第一個XOR,而不是第二OR

我還以爲你也許可以只運行兩個功能一前一後,像這樣:

UPDATE products 
SET pStatus^1 | 64 
WHERE pId = 66 

然而,僅僅產生一個語法錯誤。

有沒有人有一個解決方案,我可以在一個查詢中同時運行?


編輯和解決方案

我很接近上面我的查詢,它們結合在一起。感謝@SylvainLeroux在下面的回答中提供了正確的語法。正確的工作的說法是:

UPDATE products 
SET pStatus = (pStatus^1) | 64 
WHERE pId = 66 
+0

請縮進您的查詢,以便更清楚地進行分組。 – hakre

+0

@hakre我已經更新了我的問題。 – Styphon

回答

2

位運算符(^|&)是平原運營商。你可以合併它們。您是否嘗試過:

UPDATE products 
SET pStatus = (pStatus^1) | 64 
WHERE pId = 66; 
+0

我還沒有嘗試使用方括號,不,但仍會產生語法錯誤。 – Styphon

+1

忽略我最後的評論,我沒有做'pStatus ='或>。<。謝謝,那工作:)。 – Styphon

相關問題