2009-03-20 10 views
21

テーブルに「承認済み」という列があります。デフォルトではそれは、ユーザが許可されたときに1に変更する必要は0ですが、私が、私はそうのような2つのクエリで簡単にこれを行うことが知って0にリセットすることができなければなりません:MySQLに1つのクエリでブール値フィールドを反転させる方法はありますか?

$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'); 

何1つのクエリでこれを行う方法はありますか?ブール値を逆にするには?

答えて

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

これはきれいなIMOに見えます。 :) – alex

+0

where節、alexを必ず追加してください。 –

+0

@Peter、ありがとう、はい、しました。 – alex

4

これを行うための複数の方法がありますが、ここでは単純なものです:

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

おっと、それを忘れました。チャドに感謝します。 – alex

+4

"1 - 認可"だけではないのはなぜですか? – nickf

+1

@nickf:私はあなたに同意する、次の動作する必要があります:UPDATE users SET authorized = 1-認可されたWHERE id = 2; – dalle

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

このクエリは、フィールドを否定するために働く、およびブールの構文を使用して、よりインラインであるだろう。

+0

これは適切に投稿されませんでした。スラッシュはバックスティックでなければなりません。これはMySQLのデフォルトのカプセル化ツールです。 –

+0

それは良いことだ...! +1 – alex

+1

SET権限=!権限 –

4

あなたの「ブール」フィールドはTINYINTとして実装されている場合XORを使用して、そのも可能:

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

これは、現在、1の場合は0に「許可」を設定し、それは意志現在、0であれば1になりますゼロ以外の値もすべてゼロにするので、(私のように)いくつかの正の値を使ってさまざまな 'オン'レベルを反映させると理想的ですが、 'オフ'のときは常に0に戻す必要があります。

関連する問題