Database - Veritabanı
MYSQL'de Stored Procedure Kullanarak Sayfalama (Pagination) İşlemi Yapmak
MYSQL'de Stored Procedure Kullanarak Sayfalama (Pagination) İşlemi Yapmak
-
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
ProsedürCREATE 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ğırmaCALL SP_Icerik_Sayfala(0, 5);
Prosedür Sonucuİkinci 5 veriyi ekrana getirelim.
Prosedür ÇağırmaCALL SP_Icerik_Sayfala(5, 5);
Örnek -
öncelikle konunu favorilere aldıktan sonra ellerine sağlık diyorum.
-
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'; -
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.
-
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.
-
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ş.
-
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.
-
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 -
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 -
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)