Microsoft firmasının access ismini verdiği veritabanı uygulaması ile projeler geliştiren arkadaşların bildiği gibi ado bileşeninin recordset sınıfı bize uygulamalarımızda bir çok kolaylık sağlamaktadır. Bunlardan birisi de bir sql sorgusu çalıştırdığımızda recordset nesnesine ulaşarak etkilenmiş kayıt sayısını alabiliyoruz.
Ancak bahsettiğimiz recordset sınıfı mySQL ile çalışırken bir takım problemler çıkarmaktadır. Mesela recordcount metodu çalışmamaktadır. Hal böyle olunca mySQL ile toplam kayıt sayısına erişemeyeceğimiz kanısına kapılmamız normaldir. Ancak durum öyle değil. Kayıt sayısına erişmek için mySQL'in de 1'den fazla yöntemimiz bulunuyor. Şimdi sırasıyla bu yöntemlere bakalım.
İlk yöntem SQL sorgulama dilinin imkanlarından faydalanarak toplam kayıt sayısını döndürmektir. Örnekleri ASP dili üzerinden vereceğim. Ancak örnek içinde göreceğiniz SQL kısmı tüm programlama dillerinden aynı sonucu verecektir.
|
|
|
|
Bir diğer yöntem aynı sorguyu iki kez çalıştırmaktır.
|
|
Son çözüm yolu da şudur; mySQL'de bir özellik bulunmaktadır. Bu özellik çalıştırılan her sorgu sonucunda etkilenen, yani o sorguyla ilgili kayıtların sayısını tutması özelliğidir. Ama tahmin edeceğiniz gibi varsayılan olarak kapalıdır. Çünkü her sorgu ile kayıt sayısını takip etmenin bir performans maliyeti bulunmaktadır. Kayıt sayısı bize lazım olduğunda sorgumuzu şu şekilde oluşturmalıyız.
|
|
Verdiğimiz örnekler içinde en performanslısı son örnekteki yöntemdir. Biraz kalabalık bir kodlama gerektirmesi canınızı sıkabilecektir ancak belirttiğim makaleme bakarak bu kalabalıklığı da gidermeniz mümkündür.
Eh artık mySQL'in de kayıt sayısı döndürebildiğini gördüğümüze göre, ve ücretsiz olduğunu da hatırlayacağımız üzere, access yerine SUN firmasının desteklediği bu güzide veritabanını kullanmamanız için br neden yok.önceki yazı CodeIgniter'da Adres Yönlendirme |
sonraki yazı Spry ile İpuçları |
Peki ya 10,20 arasındaki verileri SELECT * FROM... LIMIT ile seçiyorsak ama bize aynı anda yine tabloda toplam kaç satır olduğu LIMITsiz lazımsa?
Örneğin bir sayfalama sisteminde sadece 10-20 veri çekersiniz ama aynı anda kaç sayfa olduğunu bulmak için toplam satır sayısına ihtiyacınız vardır ki bu genelde ayrı bir column'da tutulur. Fakat dediğiniz yöntem buna çözüm getiremiyor anladığım kadarıyla.
Bir de count() fonksiyonu ile phpde dönen arraylari saydırabiliriz eğer sonucu arraye atıyorsak.
limit ile hiç deneme fırsatım olmadı doğrusu... ama neden dönmesin ki ya count yada FOUND_ROWS fonksiyonuyla illaki dönüyordur. ya da mySQL'in web sitesini bir incelemek lazım, çünkü performans için şart bi durum. mutlaka bir çözümü vardır. ikinci bir sorgu ile de halledilebilir ama delilik olur bu işlem...
@Sereqwethrin, denedim, SQL_CALC_FOUND_ROWS yöntemini kullanırsan limitin 0-1 aralığında bile olsa sorguya uygun 500 kayıt varsa sana 500 sayısını döndürüyor. Kayıt setinde yine 1 adet kayıt oluyor.
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.