sayfa sayfa select ifadesi sonucunun görüntülenmesi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

sayfa sayfa select ifadesi sonucunun görüntülenmesi

Mesaj gönderen FXERKAN »

merhaba.

mesela bir tablom var ve içerisinde 1000 kayıt var. ben normal bir select ifadesi yazdığım zaman bana bu 1000 kaydı dönderiyor. benim istediğim ise mesela bu veriyi sayfalar halinde döndermesi yani. ilk 25 kaydı, sonraki 25 kaydı şeklinde nasıl bir select ifadesi yazabilirim. ben normalde top ifadesi kullanmıştım ama bu sadece ilk 25 kaydı veriyor, bundan sonraki kayıtları nasıl alabilirim. birde bu ne kadar performanslı olur. teşekkürler
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
onaydin

Mesaj gönderen onaydin »

Veritabanına göre değişir Mysql'de limit kullanılıyor, Firebird'de
select first 25 skip 730 gibi bir ifade ile oluyor. Bu tarz sayfalamalarda toplam kayıt sayısını bilmek ve bu sayıyı sayfada gösterilecek kayıt sayısına bölmek gerekiyor. Bunun içinde aynı sorguyu limit kısımları ve alan isimleri hariç count() şeklinde bir daha yazmanız gerekiyor. MySQL de bunun için SQL_CALC_NUM_ROWS isimli bir fonksiyon mevcut. Bunu
limiti kulllandığınız sorguda select in hemen yanına ekleyince select found_rows diyerek toplam sayıya ulaşılabiliyor.
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

Mesaj gönderen FXERKAN »

ben bunu oracle için sormuştum. ve bana gerekli olan böyle bir şeyin sq kodu açıkcası. ya benim aklıma geçici bir tablo oluşturup (içerisinde autoincrement bir alan olan) bu tablo içerisinden istenen aralıktaki verileri çekebilen bir sp yazmaktı ama bunun yerine bu işi yapan fonksiyonlar varmı diye soruyorum
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
onaydin

Mesaj gönderen onaydin »

Oracle için koddaki gibi olması lazım (kullanmadığımdan bilmiyorum)

Kod: Tümünü seç

SELECT * FROM (SELECT column FROM table ORDER BY column) WHERE ROWNUM BETWEEN 10 AND 20 
SQL Server'da ve Sybase'de sayfalama yapmak için sizin dediğiniz gibi geçici tablolar kullanılabiliyor.
Kullanıcı avatarı
otherside
Üye
Mesajlar: 65
Kayıt: 11 Mar 2005 02:48
Konum: istanbul

Mesaj gönderen otherside »

select top 25 * from kısmı oracle da yokmu
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
eğer ibclientdataset kullanırsanız onda kayıt sınırı koyabiliryorsunuz. yani bi seferde şu kadar kayıt oku gibisinden. ama adı şuan aklıma gelmiyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

Mesaj gönderen FXERKAN »

arkadaşlar yazdığınız cevaplar için teşekkür ederim ama maalesef hiçbiri sorunuma net bir çözüm sunmuyor. zaten oracle da TOP ifadesi yok, bunun yerine ROWNUM ile ilk kayıtları alabiliyorsunuz. yani

Kod: Tümünü seç

SELECT * FROM (SELECT column FROM table ORDER BY column) WHERE ROWNUM BETWEEN 10 AND 20 
şeklindeki ifade hiçbirişe yaramıyor. rownum için sadece <= yada < gibi şart belirtebiliyoruz.

benim isteğim bu işlemi sql ile sp yadan function içerisinden yapmak olduğu için diğer çözümlerde etkili olmadı, galiba yine geçici tablo olayına gireceğim.
teşekkürler
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Cevapla