Есть ли способ в MySQL перевернуть логическое поле с одним запросом?

У меня есть столбец в моей таблице под названием «authorized». Его значение по умолчанию равно 0. Оно должно быть изменено на 1, когда пользователь авторизован, но он должен иметь возможность сброса на 0. Я знаю, что я мог бы сделать это легко с помощью двух запросов:

$authorised = Db::query('SELECT authorised FROM users WHERE id=2'); $newAuthValue = ($authorised['authorised']) ? 0 : 1; Db::query('UPDATE users SET authorised=' . $newAuthValue . ' WHERE id=2'); 

Что я хотел знать, есть ли способ сделать это с помощью одного запроса? Отменить логическое значение?

Solutions Collecting From Web of "Есть ли способ в MySQL перевернуть логическое поле с одним запросом?"

 UPDATE users SET `authorised` = IF (`authorised`, 0, 1) 
 UPDATE `users` SET `authorised` = NOT `authorised` WHERE id = 2 

Этот запрос также будет работать, чтобы свести на нет поле, и является более встроенным с булевым синтаксисом.

Существует несколько способов сделать это, вот простой:

 UPDATE users SET authorised = ABS(authorised - 1) WHERE id = 2; 

Его также можно использовать XOR, если ваше поле «boolean» реализовано как TINYINT:

 UPDATE users SET authorised = authorised XOR 1 WHERE id = 2; 

Это установит «авторизован» на 0, если в настоящее время 1, и 1, если в настоящее время 0. Он также будет обнулять все ненулевые значения, поэтому это идеальное решение, если вы (как я) используете несколько положительных значений, чтобы отразить множество " на 'уровнях, но всегда нужно вернуться к 0, когда «выключено».