2009-03-20 14 views
21

Tabloda 'yetkilendirilmiş' başlıklı bir sütun var. Onun varsayılan Kullanıcının yetkili olduğunda 1'e değiştirilmesi gerekir 0., ama ben şöyle 2 sorgu ile kolayca bu yapabileceğini biliyorum 0'a sıfırlanması gerekir:Bir sorgu ile bir boole alanını tersine çevirmek için MySQL'te bir yol var mı?

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

neler Bilmek istedim, bunu bir sorgu ile yapmanın bir yolu var mı? Bir boole değerini tersine çevirmek için?

cevap

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

Bu daha temiz IMO'ya benziyor. :) – alex

+0

Sadece nerede bulunduğunuzu eklediğinizden emin olun, alex. –

+0

@Peter, teşekkürler, ve evet yaptım. – alex

4

Burada basit biri, bunu yapmak için birden çok yolu vardır:

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

Bunu kaçırdı. Teşekkürler Chad. – alex

+4

neden sadece "1 - yetkili" değil? – nickf

+1

@nickf: Size katılıyorum, aşağıdakiler işe yarar: UPDATE kullanıcıları SET yetkili = 1 - yetkili WHERE id = 2; – dalle

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

Bu sorgu da alan olumsuzlamak çalışacak ve boolean sözdizimi ile daha inline olduğunu.

+0

Tamam, düzgün gönderilmediyse, bu bölü çizgileri, MySQL varsayılan kapsülleyici olan backticks olmalıdır. –

+0

Bu iyi bir ...! +1 – alex

+1

SET yetkili =! Yetkili –

4
da

Onun XOR kullanmak mümkün senin 'boolean' alanı TINYINT olarak uygulanması halinde:

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

Bu, şu anda 1'e eğer 0'a 'yetkili' biçimde ayarlanır ve 1 anda 0'a Olacak eğer Ayrıca sıfır olmayan tüm değerleri sıfırlayın, yani (benim gibi), çeşitli 'açık' düzeylerini yansıtacak birkaç pozitif değer kullanırsanız, ancak her zaman 'kapalı' olduğunda 0'a geri dönmeniz gerekiyorsa ideal bir çözümdür.

İlgili konular