Bugünkü yazımda web yazılım geliştiricileri için benzeri görülmemiş bir sorgulama türünü paylaşmak istiyorum. PHP web programlama dilinde veri tabanı olarak genellikle MYSQL programı kullanılmaktadır. Yazdığımız php uygulamalarından mysql’e sorgular gönderiyoruz ve çıkan sonuca göre işlem yapıyoruz. Lafı daha fazla uzatmadan konunun detaylarına geçmek istiyorum.
Programlama senaryosu: Web uygulamasında, kullanıcı herhangi bir görüntünün ayrıntılarını görebileceği bir sayfaya tıklar. Bu sayfaya girdikten sonra sayfa içerisinde bir sonraki ve bir önceki görseli (veya ürünü) göstermek istiyoruz. Hemen düşünmek çok basit görünebilir. Ama biraz karmaşık.
Yaptığımız masa resimlerden oluşan bir masa olsun. Her fotoğrafın “Kimlik” adı verilen özel bir numarası olmalıdır. Yapılabilecek sorgulamalardan ilk akla gelen limit özelliğinin kullanılmasıdır. Örneğin kullanıcı 3 numaralı resmi seçsin. Yazdığınız kod bu resimden ikinci resim ve bir sonraki dördüncü resim bilgisini getirsin. o zamanlar ;
“Fotoğrafların kenarlıklarından * seçin 2, 3“
Yazabiliriz
Ancak bu kodlama sisteminde her zaman doğru sonuçları vermemektedir. Özellikle register 2 ve 1’de sorun çıkarıyor. Maalesef istenilen sonucu vermiyor. Ayrıca uygun bir formül bulsak bile fotoğraflı kimlik numaralarının düzenli olması gerekmektedir. Bazı kayıtlar silinirse bu sorgu çalışmayacaktır.
Resimlerin sayıları sıralı olmadığı için içinde bulunduğumuz kayıttan bir önceki kaydı bulmak için önceki kayıtları büyükten küçüğe doğru sıralamamız ve ilk kaydı seçmemiz gerekiyor. Bir sonraki kaydı bulmak için kayıtları küçükten büyüğe sıralamamız ve bulunan ilk sonucu seçmemiz gerekiyor.
Konuyu daha anlaşılır kılmak için aşağıdaki örneği verelim.
Veritabanındaki resim ID’leri: 1, 2, 3, 6, 7, 8, 12, 25, 30 olsun. 12 numaralı kaydın önceki ve sonraki değerini bulmak istiyoruz. Önceki kaydı bulmak için
“fotoğraflardan id seçiniz burada id < 12 ORDER BY id TANIM LİMİTİ 1“
Sonuç olarak, rekor 8’i alacağız.
Bir sonraki kaydı bulmak için aynı şeyi yaparsak
“fotograflardan id seçiniz burada id > 12 ORDER BY ID ASC LIMIT 1”
Bu sorgulama sonucunda 25 numaralı kaydı alacağız.
Böyle bir sistem bizim için çalışıyor gibi görünüyor. Ancak toplamda 3 sorgulama yapmamız gerekiyor. Bu işlemleri tek bir sorguda gerçekleştirmek istiyorsak şu şekilde yapabiliriz:
“SELECTa: = 1, (Fotoğraflar id’den SELECT id Nerede id
(fotoğraflardan id seçin burada id> @a ORDER BY id ASC LIMIT 1) AS next_id from fotograflar LIMIT 1″
(Burada ID ve resim konumlarını ihtiyacınıza göre değiştirebilir ve farklı alanlar ekleyebilirsiniz)
Sorgumuzu bu şekilde yaparsak prev_id ve nex_id alanlarındaki sonraki sonuçlar önceki ve sonraki sonuçlar olacaktır. Burada kullanıcının detaylarını görmek istediği görselin ID numarası olarak a:=1 ifadesini seçiyoruz. (Örneğin resim 12 numara ise a: = 12 olarak yazarız.) PHP kodu a: = “.$id.” kullanabilirsiniz.
Bu sorgu, küçük veritabanlarında makul performans düzeylerinde çalışır. Ancak büyük veritabanlarında performans biraz kötü. Test veritabanımda (55MB, 184.000 kayıtlı), ortalama 0,0931 saniye ile sonuçlanıyor. Aynı işlemi query form 3’te yaparsak, sadece select yan tümcesinde yazdığımız her sorguyu çalıştırmak 0.0004 saniye sürdü. Yani 3 sorgu için 0.0012 saniye gibi iyi bir değer alabiliyoruz. Üç sorgu formunun avantajı, id sütununun bir dizin olarak ayarlanmış olmasıdır. Dizinlenmiş sütunlarda işlem çok hızlı yapılır. Tüm veritabanları böyle bir yapıya sahiptir.
herkese iyi çalışmalar…
Diğer gönderilerimize göz at
[wpcin-random-posts]