2013-08-20 2 views
0

Возможно ли выполнить два побитовых операции в одном столбце в MySQLi в том же запросе?Выполнять две побитовые операции над столбцом в одном запросе MySQLi?

У меня есть столбец с именем status, и этот столбец содержит различные флаги, от 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 

Однако это просто выдает ошибку синтаксиса.

У кого-нибудь есть решение, в котором я могу запускать как в одном запросе?


EDIT И РЕШЕНИЕ

Я был близок с моим запросом выше, соединяя их вместе. Спасибо @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 =' or>. <. Спасибо, это сработало :). – Styphon