MySQL’de 1’i 0, 0’ı 1 yapmak


Veritabanında güncelleme işleminden önce ilgili kayıt bilgilerini seçmek ve üzerinde değişiklik yapmak gerekiyor. Eğer önceki haline bakılmaksızın tamamen yeni bir değer girilecekse buna gerek yok tabii. Mesela kullanıcının telefon şebekesini değiştirdi. Bunu güncellemesi için önceki telefon numarasını bilmesine gerek yok. Ya da kullanıcının en son ne zaman oturum açtığına ait bir kayıt tutuluyorsa… Ama yine de daha önceki kaydın gösterilmesi daha iyi olur. Çok uzun bir metinde bir kaç yazım hatası yapılmışsa, bunu düzeltmek için güncelleme sorgusundan önce seçme sorgusu yapılmalıdır diye düşünüyorum.

Gelelim benim bahsetmek istediğim konuya…

Bir buton düşünün. On/Off düğmesi gibi birşey. Bir tıkladığınızda ilgili kaydı etkinleştiriyor, bir daha tıkladığınızda devre dışı bırakıyor.

Kullanıcılar diye bir tablomuz olduğunu düşünelim:

|id |adi         |soyadi          |eposta adresi           |parola        |onay|
+---+------------+----------------+------------------------+--------------+----+
|1  |Özkan       |Özlü            |ozkanozlu@ozkanozlu.com |1234567       |1   |

Şeklinde bir kayda sahip olsun. Bu kullanıcı hesabını devre dışı bırakmak için tek bir işlem yeterli olacaktır. Öncelikle kendi yöntemimi göstermek istiyorum.

UPDATE tbl_kullanicilar SET onay = MOD(onay+1, 2) WHERE id = 1

şeklindeki sorguyu çalıştırdığımızda onay hanesini, geçerli olan değerin bir fazlasının ikiye bölümünden kalan değerle güncelleyecektir.
Bu ne demek?

onay = 0 için MOD( 0 + 1, 2) ---> onay = 1 olur
onay = 1 için MOD (1 + 1, 2) ---> onay = 0 olur

 

MOD(deger1, deger2) fonksiyonu deger1’in deger2’ye tam bölümünden sonra kalan tam sayıyı döndürür.

Bir diğer yöntem CASE WHEN yapısıyla bunu gerçekleştirmek

UPDATE kullanicilar SET onay = (CASE WHEN onay = 1 THEN 0 WHEN onay = 0 THEN 1 END) WHERE id = 1

Bu da eğer onay = 1 ise 0 yap, 0 ise 1 yap demek oluyor. Hatta bu daha gelişmiş bir şey. zira buradaki örnek sadece iki değer alabilen bir alanla ilgili. Ama bu alan 5 çeşit değer alabiliyorsa o zaman CASE WHEN yapısı çok daha kullanışlı olacaktır.

CASE WHEN yapısını şu şekilde zenginleştirebiliriz:


CASE
WHEN alan = 1 THEN = 2
WHEN alan = 2 THEN = 3
WHEN alan = 3 THEN = 4
...
END

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s