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