İlişkili tablolarda güncelleme işlemleri


Yazmakta olduğum bir sınav uygulaması için bir veritabanı hazırlamıştım.

Veritabanında çok tablo var ama burada anlatmak istediğim konuyu üç tabloyla anlatabileceğim.

Bunlardan birincisi sınavlar, ikincisi sorular, üçüncüsü de secenekler tablosu. Bu tabloların bazı sütun isimleri aşağıda gösterilmiştir.



sinavlar
id, sinav, onay, sil

sorular
id, sinavid, soru, onay, sil ----> (sinavid = sinavlar.id)

secenekler
id, soruid, secenek, dogru, sil ----> (soruid = sorular.id)

Tablolar arasındaki ilişkiler parantezler içinde belirtildiği gibi.

Öncelikle yaptığım, bir kaydın silinmesi işlemi değil. Sadece kullanıcıya silinmiş gibi gösteriyorum. Olası bir hatada sihirbazlık yapmak gerekebilir. Ne sihirdir ne keramet, el çabukluğu marifet…

Bir sınav silinirse o sınava ait soruların ve o sorulara ait seçeneklerin yetim kalmamaları için onların da silinmiş gibi gösterilmesi gerekir. Bunu üç aşamada yapıyordum. Sonra düşündüm, araştırdım karıştırdım ve aşağıdaki sorgunun işe yaradığını gördüm. Buyurun:


UPDATE
sinavlar AS si
INNER JOIN sorular AS so ON so.sinavid = si.id
INNER JOIN secenekler AS se ON se.soruid = so.id
SET
so.sil = 1,
si.sil = 1,
se.sil = 1
WHERE
si.id = 1

Bu sorguda diyoruz ki, “sinavlar tablosunda id numarası 1 olan sınavın, bu sınava bağlı olan soruların ve bu sorulara bağlı olan seçeneklerin sil alanını 1 yap. sil = 0 ise silinmemiş, 1 ise silinmiş manasına gelir.

Aahh ah! Bir söz vardır bizim oralarda: “Akılsız başın cezasını ayaklar çeker.” diye. Bizim de akılsız başımızın cezasını parmaklarımız ve sunucularımız çekmesin.

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