Ответ 1
UPDATE users SET `authorised` = IF (`authorised`, 0, 1)
У меня есть столбец в моей таблице под названием "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');
Что я хотел знать, есть ли способ сделать это с помощью одного запроса? Отменить логическое значение?
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. Он также будет обнулять все ненулевые значения, поэтому это идеальное решение, если вы (как я) используете несколько положительных значений, чтобы отразить разнообразие уровней 'on', но всегда нужно вернуться к 0, когда "выключено".