Bir sorgu ile bir boolean alan ters MySQL bir yolu var mı?

3 Cevap php

Ben 'yetkili' başlıklı benim tabloda bir sütun var. Onun varsayılan 0'dır Bu kullanıcının yetkili olduğunda 1 değiştirilmesi gerekir, ama 0'a reset edilmesi gerekir ben çok beğendi 2 sorgu ile kolayca yapabileceğini biliyorum..:

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

Ben bilmek istedim, bir sorgu ile bunu yapmanın bir yolu var mı? Bir boolean değeri ters?

3 Cevap

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

Bu sorgu da alanını inkâr çalışmak ve Boole sözdizimi ile daha inline olacaktır.

Bunu yapmanın birden çok yolu vardır, burada basit biri:

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

Senin 'boolean' alanı bir TINYINT olarak uygulanması halinde XOR kullanmak Onun da mümkündür:

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

(Benim gibi) 'çeşitli yansıtmak amacıyla birkaç olumlu değerleri kullandığınızda anda 0. Ayrıca tüm sıfır olmayan değerlere zeroise eğer bu anda 1 ise, ve 1 0' yetkili 'kuracak, böylece ideal bir çözümdür 'Kapalı' düzeyleri, ama her zaman 0'a dönmek gerekir '.