У меня есть столбец в моей таблице под названием «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');
Что я хотел знать, есть ли способ сделать это с помощью одного запроса? Отменить логическое значение?
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, когда «выключено».