Bugünkü yazımda web yazılımı yapanlara yönelik pek görülmemiş bir sorgu türünü paylaşmak istiyorum. PHP web programlama dilinde veritabanı olarak genellikle MYSQL programı kullanılır. Yazdığımız php uygulamalarından mysql e sorgular gönderip gelen sonuçlara göre işlem yaptırırz. Lafı çok uzatmadan konunun ayrıntısına geçmek istiyorum.

Programlama senaryosu: Bir web uygulamanızda kullancı herhangi bir fotografın ayrıntısını görebileceği sayfaya tıklıyor. Bu sayfaya girdikten sonra bir sonraki ve bir önceki fotoğrafı (yada ürünü) sayfa içinde göstermek istiyoruz. Aklınıza hemen bunu yapmakta ne var çok basit bir olay gibi gelebilir. Ama iş birazcık karışık.

Yaptığımız tablo fotograflar tablosu olsun. Her fotoğrafın " id " isminde özel numaraları olsun. Yapılabilecek sorgulardan ilk akla gelen Limit özelliğini kullanmak olacaktır. Öğneğin kullanıcı 3 numaralı fotoğrafı seçmiş olsun. Yazdığımı kod bu fotoğraftan bir önceki 2 ve bir sonraki 4 numaralı fotoğrafın bilgisini getirmesi lazım. Ozaman ;

"SELECT * FROM fotograflar LIMIT 2, 3"

şeklinde yazabiliriz.

Ancak bu tarz bir kodlama sisteminde herzaman düzgün sonuçlar vermemekte. Özellikle 2 numaralı ve 1 numaralı kayıtlarda problem çıkartmatadır. Mağlesef istediğimiz sonucu vermemekte. Ayrıca düzgün bir formül bulsak bile fotoğrafların id numaraları düzenli olmak zorunda. Eğer aradan bazı kayıtlar silinmiş ise bu sorgu iş görmeyecektir.

Fotoğrafların numaralarının sıralı olmamasından dolayı sorgu yaparken bulunduğumuz kayıttan bir öncekini bulmak için, öceki kayıtları büyükten küçüğe tersten sıralayıp ilk olanı seçmemiz lazım. Aynı işlemi bir sonraki kayıtı bulmak için de kayıtları küçükten büyüğe sıralayıp bulduğu ilk sonucu seçmemiz gerekiyor.

Konunun biraz daha alaşılması için şu örneği verebiliriz.

Veritabanında fotograların id leri : 1, 2, 3, 6, 7, 8, 12, 25, 30 gibi olsun. Biz 12 numaralı kayıttan bir önceki ve bir sonraki değeri bulmak istiyoruz. Önceki kayıtı bulmak için

"SELECT id FROM fotograflar WHERE id < 12 ORDER BY id DESC LIMIT 1"

bunun sonucunda bize 8 numaralı kayıt gelecektir.

Aynı işlemi bir sonraki kayıtı bulmak için yaparsak

"SELECT id FROM fotograflar WHERE id > 12 ORDER BY id ASC LIMIT 1″

bu sorgunun sonucunda bize 25 numaralı kayıt gelecektir.

Böyle bir sistem işimizi görüyor gibi . Ancak toplamda 3 sorgu yapmak zorunda kalıyoruz. Tek bir sorguda bu işlemleri yapmak istersek şu şekilde yapabiliyoruz

" SELECT @a := 1, ( SELECT id FROM fotograflar WHERE id < @a ORDER BY id DESC LIMIT 1 ) AS prev_id,

( SELECT id FROM fotograflar WHERE id > @a ORDER BY id ASC LIMIT 1 ) AS next_id FROM fotograflar LIMIT 1 "

(buradaki id ve fotograflar yerlerini kendi ihtiyacınıza göre değiştirip farklı alanlar ekleyebilirsiniz)

Sorgumuzu bu şekilde yaptığımız taktirde prev_id ve nex_id alanlarında gelek sonuçlar bir önceki ve bir sonraki sonuçlar olacaktır. Buradaki @a :=1 ifadesini kullanıcının ayrıntısına bakmak istediği fotoğrafın id numarası olarak seçiyoruz. (örneğin 12 numaralı fotoğraf ise @a := 12 şeklinde yazıyoruz. ) PHP kodu olarak @a := ". $id. " şeklinde kullanabilirsiniz.

Bu sorguyu küçük çaplı veritabanlarında performans olarak makul seviyelerde çalışıyor. Ancak büyük veritabanlarında performans biraz kötü. Kendi test veritabanımda ( 55 mb , 184. 000 kayıtlı) yaptığım işlemlerde ortalama 0. 0931 sn olarak işlemi sonuçlandırıyor. Aynı işlemi 3 sorgulu modelde yaparsak, select cümlesinin içine yazdığımız her sorgunun tek başına çalıştırılması 0. 0004 sn oldu. Yani 3 sorgu için ortalama 0. 0012 sn gibi oldukça iyi bir değer elde edebiliyoruz. 3 sorgulu modelin avantajı id sütununun index olarak belirlenmesinden kaynaklanıyor. İndex olan sütunlarda işlem yapmak oldukça hızlı gerçekleşir. Tüm veritabanlarında bu şekilde bir yapı vardır.

Herkeze İyi Çalışmalar...

Kategoriler:

Yapılan Yorumlar

Henüz kimse yorum yapmamış.

Bu sayfada yer alan bilgilerle ilgili sorularınızı sorabilir, eleştiri ve önerilerde bulunabilirsiniz. Yeni bilgiler ekleyerek sayfanın gelişmesine katkıda bulunabilirsiniz.

Yorum Yapın

Adınız:
E-Mail:
Mesajınız:
Doğrulama: Güvenlik Kodu
 
Hosts Dosyası Nedir?     Ekinoks Nedir?     Vista Transformation Pack 5.5     Samsung'un 32 GB Flash Sürücüsü Görücüye Çıktı     İntel'in Core 2 Duo E6400'ü %56'lık oc ile fiyat-performans kralı     M-Audio MobilePre USB - USB Beslemeli, Pre-amplifikatörlü USB Ses Kartı     Cubase 4 - Devrimci bir kilometre taşı Müzik prodüksiyon yazılımı.     İşte Karşınızda Yeni Honda Civic     M-Audio, Avid/Digidesign tarafından satın alındı - İki dev birleşti     Avedesk Bölüm2     StrokeIt 9.5     VW Touran CCS (BiZEL Motorlu Tek Araç)     Windows Vista Güncelleştirme Paketi     AMD: Fusion ile CPU ve GPU'yu Birleştiriyor.     Murat Günak kimdir?     NanoTeknoloji Nedir?     Arama Motorları Nasıl Çalışır?     Java Destekli Telefonlar için 3D Performans ve Kalite Testleri     Barkod Nedir?     VW Tiguan ( Küçük Touareg )     Cubase 4 - Kontrol Odası (Control Room)     SSL Nedir? Nasıl Çalışır?     MouseIMP Pro     C-Metisse (Citroen'in Yeni Bombası)     Avedesk Bölüm 3 - Ave Scripter Eklentileri     H-racer ve Hydrogen Station     Ürün incelemesi: Saitek P3000 Wireless PRO Gamepad     Windows Vista Sidebar     Ürün İncelemesi: Toshiba USB 2.0 1GB Flash Bellek     Beklenen oyun: Trackmania UNITED çıktı!     AMD FireSTREAM Kartlara Logosunu Verdi     Pardus Linux 2007 Beta 2     VISTA TRANSFORMATION PACK 6.0     Ürün İncelemesi: APC Back-UPS RS 1000VA Kesintisiz Güç kaynağı(KGK)     Ekran Kartları Nasıl Çalışır?     Nintendo Wii Haber Kanalı Artık Yayında     Hidrojen Kullanan Otomobil Sayısı Her Geçen Gün Artıyor!     Saab Bio Power     Yüzyılın icadı: Erke Dönergeci     Samsung'tan Dünyanın En İnce Cep Telefonu     Apple iPhone     10.000 Pardus     Mobility Radeon X1900     TecrubeliPilotAraniyor.COM     Super Mario artık Nintendo Wii ‘de     Vista'nın da çıkmasıyla beraber 4 çekirdekli işlemciler artık standart hale geliyor     Avedesk Eklentilerin Ayarlanması     Ford Mustang Giugiaro Konsept     Dünyanın İlk Boxer Turbo Dizel Motoru     Microsoft Virtual PC 2007     ATI Catalyst 7.2 Sürücüleri Çıktı!     Yüzyılın yarış oyunu: Test Drive Unlimited!     Kuantum Bilgisayarlar Geliyor     Dizüstü Canavarı: Monster T2-Rex T72M575U1     Kuantum Bilgisayarlar     MSN alternatifi, kullanıcıların yeni gözdesi: Trillian     Vista üzerinde IIS 7.0 Kurulumu     Video oyunları çocukları zayıflatıyor     Yahoo Messenger Vista !     Corel WordPerfect Lightning' in halka açık beta sürümünü yayımlıyor!     Casper, dört çekirdekli Intel CoreTM 2 Quad Q6600 işlemciye sahip yeni modelini pazara sundu.     Intel 11X Fabrikasını Yenliyor     HP iPAQ Voice Messenger 510 ; Ses tanıma, Wi-Fi, Windows Mobile 6.0 hepsi bir arada     Toshiba'dan 51 GB HD DVD     F1'e geri sayım…     Far Cry'ın devam oyunu, muhteşem grafikleriyle: Crysis     Değişen İklim Değil,Enerji Olsun!..     IBM Dünya'nın En Güçlü Bilgisayarını Geliştriyor     Küresel Isınmanın Nedenleri? Sebepleri?     Hard Disk Pazarının Kralı: Seagate     Elbit Systems VIPeR "avcı-katil" robotu çıkarıyor     Oyunlar yeni bir boyut kazandı: TrackIR!     Yod'm 3D     Vista Aero Reloaded     Hava Kirliliğini Arttıran Sıcaklık İnversiyonu- Bölüm1     Yahoo'dan Sınırsız Email Kapasitesi     Adobe'den Ücretsiz PDF Oluşturma Hizmeti     Türk insanına has Google Logoları…     AeroClear Glass for Vista Theme     Hava Kirliliğini Arttıran Sıcaklık İnversiyonu- Bölüm2     Vista'da Farklı Temalar Kullanmak     Ati HD2900XT, Nvidia 8800GTX'a Karşı: Crysis Demo ve 3DMark06 Testleri     Google Spreadsheets     NuSphere PhpED IDE     768MB 8800GTX, 512MB ATI HD 2900XT, 640MB 8800GTS Oyun ve 3DMark06 Testleri     Mucitlerimiz Gün Işığına Çıkıyor     Nükleer Santraller: Nasıl Çalışır? Problemleri Nelerdir?     İTÜRO     Hovercraft: Sınır Tanımayan Araç     Vestel, Tamamen Türk Yapımı Yakıt Pili Üretti     Free Loader güneş pili     İTÜ Robot Olimiyatları     Yenilenebilir Enerji Kaynakları Nelerdir?     Kuzey Işıkları'nın Dansı     Adobe CS3 ile Mac'te, Daha Fazla Şey Yapın     Beynimiz Nasıl Öğreniyor?     Boğaziçi Üniv. Robot Günleri     Motorlarda Yanma Odaları ve Özellikleri     Güneş Enerjisi Nedir?     Crysis'in sahne tasarımlarına bir göz atalım    
Coğrafya
Coğrafya Sitesi
Tarih Sitesi
Türkçe Sitesi
Bilgi Sitesi
Bilgiler