none
Belirli kayıt tutma RRS feed

  • Soru

  • Veritabanında bir tablom olacak KullanıcıId | İşlemi vs. gibi ben bu tabloya her kullanıcının yaptığı 10 işlemi kaydetmek istiyorum. 10 işlem kaydı yapıldıktan sonrada bu 10 işlemi sondan başa tekrar güncellemek istiyorum. Bu konuyla ilgili bilgilerinizi paylaşırsanız sevinirim. Teşekkürler.
    8 Nisan 2014 Salı 14:31

Yanıtlar

  • Merhaba;

    Kodlar aşağıda. Sanırım bunun gibi birşey

    --KULLANICI TABLOSU OLUŞTURUR
    CREATE TABLE [dbo].[Kullanicilar](
    	[KullaniciId] [int] IDENTITY(1,1) NOT NULL,
    	[Ad] [nvarchar](50) NULL,
    	[Soyad] [nvarchar](50) NULL,
     CONSTRAINT [PK_Kullanicilar] PRIMARY KEY CLUSTERED 
    (
    	[KullaniciId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    --ISLEM TABLOSU OLUŞTURUR
    CREATE TABLE Islemler
    (
    	[IslemId] [int] IDENTITY(1,1) NOT NULL,
    	[KullaniciId] [int] NULL,
    	[IslemAdi] [nvarchar](50) NULL,
    	[Aciklama] [nvarchar](500) NULL,
    	[SonGuncellenmeTarihi] [datetime] NULL,
     CONSTRAINT [PK_Islemler] PRIMARY KEY CLUSTERED 
    (
    	[IslemId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[Islemler] ADD  CONSTRAINT [DF_Islemler_SonGuncellemeTarihi]  DEFAULT (getdate()) FOR [SonGuncellenmeTarihi]
    GO
    
    --ISLEMİ KAYDEDERKEN EĞER 1 KULLANICIYA AİT 10 DAN FAZLA İŞLEM VARSA 
    --EN ESKİ İŞLEMİN ÜZERİNE YENİ İŞLEMİ YAZAR YOKSA YENİ KAYIT OLARAK EKLER
    CREATE PROCEDURE IslemKaydet
    @KullaniciId int,
    @IslemAdi nvarchar(50),
    @Aciklama nvarChar(500)
    AS
    IF (SELECT COUNT(*) FROM Islemler WHERE KullaniciId=@KullaniciId) < 10 BEGIN
    	INSERT INTO Islemler(KullaniciId,IslemAdi,Aciklama) VALUES(@KullaniciId,@IslemAdi,@Aciklama)
    END
    ELSE BEGIN
    	UPDATE Islemler SET IslemAdi=@IslemAdi, Aciklama=@Aciklama, SonGuncellenmeTarihi=GETDATE() WHERE IslemId=(SELECT TOP 1 IslemId FROM Islemler WHERE KullaniciId=@KullaniciId ORDER BY SonGuncellenmeTarihi ASC)
    END
    
    --YUKARDAKİLERİ ÇALIŞTIRDIKTAN SONRA AŞAĞIDAKİ SORGUYU ÇALIŞTIRARAK DENEYEBİLİRSİN
    --EXECUTE IslemKaydet 1, 'Kayıt Ekleme4', 'açiklama s2 - 4'
    
    --KAYITLARI ÇEKERKEN AŞAĞIDAKİ GİBİ ÇEKERSEN SONDAN İLKE DOĞRU OLUR
    --SELECT * FROM Islemler ORDER BY SonGuncellenmeTarihi DESC

    NOT: Procedure kullanarak yaptım.

    Tablolara başka detaylarda ekleyebilirsiniz. Ben en sade şekli ile yaptım.

    Anlamadığınız bir yer varsa lütfen sorunuz.

    Kolay gelsin.


    Yunus Emre ALTINAY


    Yunus Emre ALTINAY

    • Yanıt Olarak İşaretleyen Arshenick 11 Nisan 2014 Cuma 11:58
    9 Nisan 2014 Çarşamba 15:32

Tüm Yanıtlar

  • Tablona tarih ve saat eklersen, her zaman kullanici basina son 10 kaydi alabilirsin. Eger istiyorsan eskileri de silersin. 

    Bazi veritabanlari array tipini destekliyor,

    8 Nisan 2014 Salı 18:36
  • Merhaba;

    Kodlar aşağıda. Sanırım bunun gibi birşey

    --KULLANICI TABLOSU OLUŞTURUR
    CREATE TABLE [dbo].[Kullanicilar](
    	[KullaniciId] [int] IDENTITY(1,1) NOT NULL,
    	[Ad] [nvarchar](50) NULL,
    	[Soyad] [nvarchar](50) NULL,
     CONSTRAINT [PK_Kullanicilar] PRIMARY KEY CLUSTERED 
    (
    	[KullaniciId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    --ISLEM TABLOSU OLUŞTURUR
    CREATE TABLE Islemler
    (
    	[IslemId] [int] IDENTITY(1,1) NOT NULL,
    	[KullaniciId] [int] NULL,
    	[IslemAdi] [nvarchar](50) NULL,
    	[Aciklama] [nvarchar](500) NULL,
    	[SonGuncellenmeTarihi] [datetime] NULL,
     CONSTRAINT [PK_Islemler] PRIMARY KEY CLUSTERED 
    (
    	[IslemId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[Islemler] ADD  CONSTRAINT [DF_Islemler_SonGuncellemeTarihi]  DEFAULT (getdate()) FOR [SonGuncellenmeTarihi]
    GO
    
    --ISLEMİ KAYDEDERKEN EĞER 1 KULLANICIYA AİT 10 DAN FAZLA İŞLEM VARSA 
    --EN ESKİ İŞLEMİN ÜZERİNE YENİ İŞLEMİ YAZAR YOKSA YENİ KAYIT OLARAK EKLER
    CREATE PROCEDURE IslemKaydet
    @KullaniciId int,
    @IslemAdi nvarchar(50),
    @Aciklama nvarChar(500)
    AS
    IF (SELECT COUNT(*) FROM Islemler WHERE KullaniciId=@KullaniciId) < 10 BEGIN
    	INSERT INTO Islemler(KullaniciId,IslemAdi,Aciklama) VALUES(@KullaniciId,@IslemAdi,@Aciklama)
    END
    ELSE BEGIN
    	UPDATE Islemler SET IslemAdi=@IslemAdi, Aciklama=@Aciklama, SonGuncellenmeTarihi=GETDATE() WHERE IslemId=(SELECT TOP 1 IslemId FROM Islemler WHERE KullaniciId=@KullaniciId ORDER BY SonGuncellenmeTarihi ASC)
    END
    
    --YUKARDAKİLERİ ÇALIŞTIRDIKTAN SONRA AŞAĞIDAKİ SORGUYU ÇALIŞTIRARAK DENEYEBİLİRSİN
    --EXECUTE IslemKaydet 1, 'Kayıt Ekleme4', 'açiklama s2 - 4'
    
    --KAYITLARI ÇEKERKEN AŞAĞIDAKİ GİBİ ÇEKERSEN SONDAN İLKE DOĞRU OLUR
    --SELECT * FROM Islemler ORDER BY SonGuncellenmeTarihi DESC

    NOT: Procedure kullanarak yaptım.

    Tablolara başka detaylarda ekleyebilirsiniz. Ben en sade şekli ile yaptım.

    Anlamadığınız bir yer varsa lütfen sorunuz.

    Kolay gelsin.


    Yunus Emre ALTINAY


    Yunus Emre ALTINAY

    • Yanıt Olarak İşaretleyen Arshenick 11 Nisan 2014 Cuma 11:58
    9 Nisan 2014 Çarşamba 15:32
  • Yunus bey teşekkür ederim kodlar işimi gördü :)
    11 Nisan 2014 Cuma 12:01