folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder MYSQL'de Stored Procedure Kullanarak Sayfalama (Pagination) İşlemi Yapmak



MYSQL'de Stored Procedure Kullanarak Sayfalama (Pagination) İşlemi Yapmak

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Bu makalemizde MYSQL veritabanı kullanarak sayfalama (pagination) yapma adımlarını anlatacağız.

    Kısa bir hatırlatmada fayda var. Sorguların daha hızlı çalışması için çalışma yükünü olabildiğince sql sorgularının çalıştığı sistemlere yükleriz (MYSQL, MSSQL vs.. gibi). Bu örneğimizi MYSQL üzerinden işleyeceğiz. MYSQL'in en büyük avantajlarından (kolaylıklarından) birisi de LIMIT adlı deyimin bulunmasıdır.
    Öncelikle tablomuzu oluşturalım.

    Tablo Oluşturuyoruz

    CREATE TABLE tblIcerikler
    (
    ID INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
    baslik VARCHAR(255)
    )


    Yazacağımız prosedürü test etmek için yeterli miktarda veri girişi yapalım.


    Tablo Oluştu
    MYSQLde Stored Procedure Kullanarak Sayfalama (Pagination) İşlemi Yapmak


    Prosedür

    CREATE PROCEDURE SP_Icerik_Sayfala
    (
     IN intAlt_Sinir INT,
     IN intIcerik_Sayisi INT
    )
    BEGIN
     SELECT * FROM tblIcerikler order by ID DESC LIMIT intAlt_Sinir, intIcerik_Sayisi;
    END


    Şimdi yazmış olduğumuz prosedürü çalıştıralım. İlk 5 veriyi ekrana getirelim.


    Prosedür Çağırma

    CALL SP_Icerik_Sayfala(0, 5);


    Prosedür Sonucu

    MYSQLde Stored Procedure Kullanarak Sayfalama (Pagination) İşlemi Yapmak

     

    İkinci 5 veriyi ekrana getirelim.


    Prosedür Çağırma

    CALL SP_Icerik_Sayfala(5, 5);



    Örnek

    MYSQLde Stored Procedure Kullanarak Sayfalama (Pagination) İşlemi Yapmak
     
    ontedi tarafından 13/May/16 23:18 tarihinde düzenlenmiştir

    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DuPi
    DuPi's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    öncelikle konunu favorilere aldıktan sonra ellerine sağlık diyorum.


    Ne zaman birşey öğrenmek istesem, Birden Vaktim Kalmıyor ?
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    masteryoda
    masteryoda's avatar
    Kayıt Tarihi: 15/Mayıs/2012
    Erkek

    Yeri gelmişken sorayım hocam mysqlde post event kullanabiliyormuyuz örneğin bir tabloda bi kayıt değiştiği anda yeni kayıt eklendiğinde firebirde trigeri aşağıdaki şekilde kullanıyorum o tabloyu dinliyor ve ekleme v.s olduğunda delphi tarafında yeni kayıt eklendi silindi v.s yakalayabiliyorum mysql de varmı böyle bir şey?
    if (inserting) then
    post_event 'EKLEME';
    ELSE
    if (updating) then
    post_event 'GUNCELLEME';
    else
    post_event 'SILME';

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek
    masteryoda bunu yazdı

    Yeri gelmişken sorayım hocam mysqlde post event kullanabiliyormuyuz örneğin bir tabloda bi kayıt değiştiği anda yeni kayıt eklendiğinde firebirde trigeri aşağıdaki şekilde kullanıyorum o tabloyu dinliyor ve ekleme v.s olduğunda delphi tarafında yeni kayıt eklendi silindi v.s yakalayabiliyorum mysql de varmı böyle bir şey?
    if (inserting) then
    post_event 'EKLEME';
    ELSE
    if (updating) then
    post_event 'GUNCELLEME';
    else
    post_event 'SILME';

    Mysql before ve after olmak üzere

    update, delete, insert komutlarında tetikleyicileri destekliyor hocam. Daha önce kullanmıştım bir projemde.


    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    masteryoda
    masteryoda's avatar
    Kayıt Tarihi: 15/Mayıs/2012
    Erkek
    DrKill bunu yazdı
    masteryoda bunu yazdı

    Yeri gelmişken sorayım hocam mysqlde post event kullanabiliyormuyuz örneğin bir tabloda bi kayıt değiştiği anda yeni kayıt eklendiğinde firebirde trigeri aşağıdaki şekilde kullanıyorum o tabloyu dinliyor ve ekleme v.s olduğunda delphi tarafında yeni kayıt eklendi silindi v.s yakalayabiliyorum mysql de varmı böyle bir şey?
    if (inserting) then
    post_event 'EKLEME';
    ELSE
    if (updating) then
    post_event 'GUNCELLEME';
    else
    post_event 'SILME';

    Mysql before ve after olmak üzere

    update, delete, insert komutlarında tetikleyicileri destekliyor hocam. Daha önce kullanmıştım bir projemde.

    Hocam update,delete,insert desteklediğini biliyorum post_event ın farkı şu örneğin ben bir tabloya kayıt eklendiği zaman sürekli bir sql ile kontrol etmiyorum yeni kayıt eklenmişmi firebirde ki post_event bildiğimiz bağırmak gibi post_event 'EKLEME'; dediğimde firebird rdbms kendisi haber veriyor ben client uygulamam da sadece biri EKLEME diye bağırıyormu kulaklarını aç demiş oluyorum bağırınca o bağırdığı şeye göre işlem yaptırıyorum.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek
    masteryoda bunu yazdı
     

    Hocam update,delete,insert desteklediğini biliyorum post_event ın farkı şu örneğin ben bir tabloya kayıt eklendiği zaman sürekli bir sql ile kontrol etmiyorum yeni kayıt eklenmişmi firebirde ki post_event bildiğimiz bağırmak gibi post_event 'EKLEME'; dediğimde firebird rdbms kendisi haber veriyor ben client uygulamam da sadece biri EKLEME diye bağırıyormu kulaklarını aç demiş oluyorum bağırınca o bağırdığı şeye göre işlem yaptırıyorum.

    hımm ben yanlış anlamışım. Anladığım kadarıyla olay tabanlı mysql'den direk arka plan uygulamasına push notification gibi birşey değil mi söylediğin? Bildiğim kadarıyla mysql de böyle bir özellik yok. Güzel bir özellikmiş.


    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    masteryoda
    masteryoda's avatar
    Kayıt Tarihi: 15/Mayıs/2012
    Erkek
    DrKill bunu yazdı
    masteryoda bunu yazdı
     

    Hocam update,delete,insert desteklediğini biliyorum post_event ın farkı şu örneğin ben bir tabloya kayıt eklendiği zaman sürekli bir sql ile kontrol etmiyorum yeni kayıt eklenmişmi firebirde ki post_event bildiğimiz bağırmak gibi post_event 'EKLEME'; dediğimde firebird rdbms kendisi haber veriyor ben client uygulamam da sadece biri EKLEME diye bağırıyormu kulaklarını aç demiş oluyorum bağırınca o bağırdığı şeye göre işlem yaptırıyorum.

    hımm ben yanlış anlamışım. Anladığım kadarıyla olay tabanlı mysql'den direk arka plan uygulamasına push notification gibi birşey değil mi söylediğin? Bildiğim kadarıyla mysql de böyle bir özellik yok. Güzel bir özellikmiş.

    Evet hocam buna şöyle örnek verebilirim dev ekranda bekleyen siparişler görünsün isteniyor herhangi bir şekilde timer v.s kullanmadan RDBMS o tabloda değişiklik,ekleme olunca ilgili yere bildiriyor bildirdiği yer  tabloyu refresh ediyor sürekli sorgu gönderme maliyeti olmamış oluyor. olaydı opencarta başarılı düşen siparişler anında sipariş modülüne aktarma yapacaktım.

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DuPi
    DuPi's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    https://emircem.wordpress.com/2011/07/20/mysqlde-sakli-yordamlar/

    burda konu biraz daha detaylı anlatılmış. mysql 5 ten sonra event ve trigger lar var diyor.

    stored procedure syntax'ı pascal mı bana mı öyle geliyor?

    DuPi tarafından 14/May/16 10:44 tarihinde düzenlenmiştir

    Ne zaman birşey öğrenmek istesem, Birden Vaktim Kalmıyor ?
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    S2kucuk
    S2kucuk's avatar
    Banlanmış Üye
    Kayıt Tarihi: 06/Haziran/2015
    Erkek
    DuPi bunu yazdı

    https://emircem.wordpress.com/2011/07/20/mysqlde-sakli-yordamlar/

    burda konu biraz daha detaylı anlatılmış. mysql 5 ten sonra event ve trigger lar var diyor.

    stored procedure syntax'ı pascal mı bana mı öyle geliyor?

     

    Arkadaşın sorduğu şey event ve trigger değil hocam. Veritabanı içerisinde doğrudan event listener var. Bir event oluştuğunda dinleyen tüm clientlara bu eventle ilgili haber veriyor. Haber verirken de herhangi bir messaging queue kullanılmıyor dezavantajı clientın anlık olarak bağlantısı koparsa kaçırdığı mesajları alamıyor. MySQL'de bu tarz bir özellik malesef yok. Olsa bile PHP ile kullanılamaz. (opencart ile kullanacağım demişsin) Çünkü PHP'nin çalışma prensibine göre PHP kod execute edilir sayfa çıktısı alınır ve webserver sana bu çıktıyı verir. Arada sürekli bir bağlantı yok. Ha bunu java ile yapayım dersen olur ama PHP ile çözümlemen zor. 

    İlla kafaya koydum bu tarz birşey yapacam dersen java ile netty kütüphanesiyle basit bir event listener mekanizması yaparsın. Clientlar eventlere register olur, herhangi bir event oluştuğunda tüm dinleyen clientlara o mesajı basarsın üstüne üstlük message queue, authentication gibi mekanizmalar ekleyerek çok daha gelişmiş bir yapı kurabilirsin. Clientın tek yapması gereken socket bağlantı koptukça tekrar yenisini açmak ve mesajları yorumlamak. Tabiki bu eventleri PHP server socketten notification servera yazarak haberdar edecek. Sözkonusu kullanıcı sayısı 10-20 ise hiç uğraşmadan ajax ile sayfayı yenilemek çok daha pratik olacaktır. 100k kişi kullanacaksa bu sistemi tabiki akıllı bir sisteme ihtiyaç var. 

    Edit: Konu sahibi de faydalı bir mevzuya değinmiş. Ufak bir ek de ben yapayım; stored procedure kullanmak normal sorgu çekmekten daha hızlı çalışır. MySQL sorguyu her seferinde parse edicem diye uğraşmaz (PDO kullanırsanız da aynı şey geçerli) Dezavantajı ise bakım işlerini zorlaştırabilir. 

    S2kucuk tarafından 14/May/16 11:57 tarihinde düzenlenmiştir
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DuPi
    DuPi's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    evet şimdi anladım hocam.

    veritabanını oldum olası sevmemişimdir. ama her zamanda işim düşmüştür :(

    şimdi bile AVM için bir program hazırlıyorum. (Kendime sırf raporlama için)


    Ne zaman birşey öğrenmek istesem, Birden Vaktim Kalmıyor ?
Toplam Hit: 787 Toplam Mesaj: 10
mysql sayfalama mysql pagination