Подтвердить что ты не робот

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

У меня есть столбец в моей таблице под названием "authorized". Его значение по умолчанию равно 0. Он должен быть изменен на 1, когда пользователь авторизован, но он должен быть reset до 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');

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

4b9b3361

Ответ 1

UPDATE users SET `authorised` = IF (`authorised`, 0, 1)

Ответ 2

UPDATE `users` SET `authorised` = NOT `authorised` WHERE id = 2

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

Ответ 3

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

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

Ответ 4

Также возможно использовать XOR, если ваше поле "boolean" реализовано как TINYINT:

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

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