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
sayfa sayfa select ifadesi sonucunun görüntülenmesi
sayfa sayfa select ifadesi sonucunun görüntülenmesi
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
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.
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.
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 Ç İ ]
Oracle için koddaki gibi olması lazım (kullanmadığımdan bilmiyorum)
SQL Server'da ve Sybase'de sayfalama yapmak için sizin dediğiniz gibi geçici tablolar kullanılabiliyor.
Kod: Tümünü seç
SELECT * FROM (SELECT column FROM table ORDER BY column) WHERE ROWNUM BETWEEN 10 AND 20
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
ş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
Kod: Tümünü seç
SELECT * FROM (SELECT column FROM table ORDER BY column) WHERE ROWNUM BETWEEN 10 AND 20
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 Ç İ ]