Firebird [MySql LIMIT simulasyonu]

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Firebird [MySql LIMIT simulasyonu]

Mesaj gönderen gkimirti »

MySql de LIMIT komutu select ifadelerinde cok faydalı bir anahtar kelime
mesela 1. sayfada 0. kayıttan 10 kayıt getir,2.sayfada 10.kayıttan 10 kayıt getir vs. boylece sayfalar ile kayıtları gez

Firebird de FIRST ve SKIP birlikte LIMIT islevini gormekte

SELECT FIRST 10 SKIP 0 * FROM MYTABLE
0.kayıttan sonra 10 kayıt

SELECT FIRST 10 SKIP 10 * FROM MYTABLE
10.kayıttan sonra 10 kayıt

SELECT FIRST 10 SKIP 20 * FROM MYTABLE
20.kayıttan sonra 10 kayıt

Kolay Gelsin
ÜŞENME,ERTELEME,VAZGEÇME
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Paylaştığınız için teşekkür ederim.

İyi Çalışmalar.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

abi kod bana lazım oldu, kullandım teşekkürler, ama benim bu kodu kullanmamdaki amaç, veritabanından ağ üzerinde hızlı veri çekmek olacak.
Sınırlı saydıa kayıt çekersem gerçekten bir performans artışı olur mu?
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

Olur tabi neden olmasın.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

oo süper oldu bu gelişmeler. düzgün bir algoritma da kullanırsam 50 bilgisayarlı sistemde bilgisayarlar hiç kasılmaz. :)
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

Olur tabi. Ben programlamaya ilk vb'de başlamıştım. Acsess 'dan başka veri tabanı bilmiyordum bu nedenle TCP/IP ile chat gibi haberleşerek verileri aktaran client/server bir program yazmıştım visual basic'de. GPRS üzerinde çalışıyordu :) Ne hammallık etmişim :) Akılsız başın cezasını parmaklar çekermiş.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

peki şöyle bir durum var.
ben bu işlemi veritabanını rahatsız etmemek için yapıyorum. yani tüm dataları çekmek yerine 10ar 10ar çekeyim diyorum.
mesela diyelim son 10 faturayı veritabanından çektim.
son 10 faturanın müşteri bilgilerinin de müşteri tablosundan çekmek istesem nasıl olur?

son 10 faturayı çeken kod [ibdataset için]:

Kod: Tümünü seç

select first 10 skip 567 * from faturalar
son 10 faturanın müşteri bilgilerini çeken kod

Kod: Tümünü seç

select * from musteriler where musterino in(select first 10 skip 567 musteri_no from faturalar) 
bu sistem çalışır ama select first 10 skip 567 * from faturalar sorgusu iki kere çalıştırılmış oluyor.
ikinci sorguda musterino in'den sonra veritabanını rahatsız etmeden devam edemezmiyiz? çünkü zaten 1. sorguda söz konusu kayıtları çektik.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

join kullanin

select first 10 skip 567 * from faturalar f
left join musteriler m on f.musteriid = m.id
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

fikir için teşekkürler sadettin abi. ama ben söz konusu sorguları datasete çekicem yani üzerinde bir değişiklik veya kayıt silme işlemi de yapılabilmeli. o nedenle ayrı bir sorgu gerekli bana.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

peki bu işlemi mssql de nasıl yapıyoruz
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Baya bir araştırdım, ama tam olarak skip işlemini yapan komuta rastlayamadım.

aşağıdaki sorguda görülen subquery skip işlemi görüyor. order by önemli.

Kod: Tümünü seç

SELECT TOP 10 * FROM TBL_ILLER AS IL
WHERE IDNO NOT IN (SELECT TOP 10 IDNO FROM TBL_ILLER  ORDER BY IDNO ASC) ORDER BY IDNO ASC
Cevapla