*

şükela:  tümü | bugün
  • sayfalama
  • web sitelerinde herhangi bir konuda listeleme yapıldığında üst ve altta bulunan sayfa numaraları, önceki ve sonraki bloğunun adı.

    genelde şöyle görünür :

    önceki sayfa 1 2 3 4 5 6 7 8 9 10 sonraki sayfa
  • mysql ve postgresql'de limit ve offset ile,
    jpa'da ise query'nin setfirstresult ve setmaxresults metotlarıyla yapılıyormuş.

    ek: oracle için şöyle yapılıyormuş:

    select * from (select a.*, rownum rnum from (
    /* sayfalanacak kayitlari getirecek sorgu */
    select * from hede
    order by hodo
    ) a where rownum <= :max_row_to_fetch) where rnum >= :mın_row_to_fetch;

    max_row_to_fetch: istenen son satır
    mın_row_to_fetch: istenen ilk satır

    rownum'ın çalışma prensibi nedeniyle dıştaki 2 sorgu birleştirilemiyormuş. sayfalama değil de "ilk x kayıt" için dıştaki silinebilir tabi ki.

    neden böyle, başka nasıl yapılabilir, en iyisi bu mudur, select * from hede where rownum < x and rownum > y neden olmaz:
    http://www.oracle.com/…06-sep/o56asktom-086197.html
    http://www.oracle.com/…07-jan/o17asktom-093877.html

    rownum'ın neden direkt kullanılmadığı, kısaca: rownum sıralamadan önce oluştuğu için yapılan sayfalama ile sıralamanın alakası olmazmış. önce sayfalamayı yapıp sonra sıralama yaparmış, onun için iç içe yapıyormuşuz. rownum sadece gösterilen kayıtlar için oluştuğu için de "and rownum >= " deyu tek seferde yapamıyormuşuz. örneğin select * from hede where rownum > 1 hep boş dönermiş. bir "limit, offset" yazmak bu kadar uzatılır mıymış? neyse efenim milyar dolarlık şirket, vardır bildikleri.