Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: Aynı Tabloda Farklı Sorgulama Olayını Nasıl Yapabilirim  (Okunma sayısı 1851 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı hhhccc70

  • Delphi 1 Level 1
  • *
  • İleti: 4
  • Rep: +0/-0
Herkese selam,

konularda arattırdım ama, istediğime uygun bir cevap bulmadım.

mysql de her kullanıcın girerken kaydettiğim ip numaraları var.  sürekli kayıttan dolayı dosya şişiyor. Her kullanıcının  en son  10 kayıttan sonrasını listeleme ve silmek istiyorum bunu nasıl yapabilirim yardımcı olurmusunuz.  eğer kullanının kayıt sayısı 10 dan fazla değilse silinmeyecek, eğer 10 kayıttan fazla ise sadece fazla olan ksıımları silinecek. Join group yaptım istediğim sonucu alamıyorum. teşekkürler

Yapı şöyle

ID  TARIH          IPNO                USERNO
1    10.01.2010   81.234.12.22    4
2    10.01.2010   83.222.22.22    4
3    10.01.2010   85.33.222.333  5
4    10.01.2010   123.33.44.444  7

Çevrimdışı aligel54

  • Delphi 2006 Level 4
  • ****
  • İleti: 481
  • Rep: +1/-0
Ynt: Aynı Tabloda Farklı Sorgulama Olayını Nasıl Yapabilirim
« Yanıtla #1 : 28 Ocak 2010 10:13:19 »
Dostum tek satırda bunu yapacak bir komut bulamadım
Benim yapabildiğim ancak şu şekilde...


Kod:  (Unknown Language)
  1. Query1.Sql.Text:='select ID from tabloAdi where user="4"';
  2. Query1.open;
  3.  
  4. Sayi:=Query1.Recordcount;
  5. if Sayi>10 then
  6. begin
  7.   Query1.Sql.Text:='Delete from tabloAdi where user="4" order by tarih, id limit "'+inttostr(Sayi-10)+'"';
  8.   Query1.ExecSQL;
  9. end;


Aslında bunu tek bir SQL koduyla yazabilirdik. Tabi Delete ile Limit kullanımı Select ile kullanımından farklı olmasaydı.

Örneğin Son 10 kayıttan öncesini şu komutla seçebiliyorum.
Select * from TabloAdi where user="4" order by tarih desc, id desc limit 10,1000
komutuyla son 10 kayıttan önceki 1000 kayıtı (tabi varsa) seçebiliyorum.
Fakat aynı işlemi yani bu seçtiklerimi delete ile silemiyorum
Yani;
Delete from TabloAdi where user="4" order by tarih desc, id desc limit 10,1000
ifadesi çalışmıyor. (en azından MySQL in 4.02 versiyonunda çalışmıyor. Diğerlerini bilmiyorum)

Burada seçim yaparken 10 ncu kayıttan itibaren 1000 tanesini seç derken
silme işleminde aynı şekilde 10 ncu kayıttan itibaren gibi bir seçim yapamıyoruz.


« Son Düzenleme: 28 Ocak 2010 10:14:21 by aligel54 »

Çevrimdışı hhhccc70

  • Delphi 1 Level 1
  • *
  • İleti: 4
  • Rep: +0/-0
Ynt: Aynı Tabloda Farklı Sorgulama Olayını Nasıl Yapabilirim
« Yanıtla #2 : 28 Ocak 2010 12:12:37 »
kardeş teşekkür ederim ama malesef cevap olmuyor. çünkü her hangi bir programlama dili kullanmıyorum. yani sadece sql kodu ile yapmam gerekiyor.

verdiğin sql kodunda user=4 demişşsin buda mümkündeğil herhangi bir kullanıcının değil tüm kullnıcıların ilk 10 kaydını alt alta listeletmek gerekiyorki bundan sonrasını silme işlemine geçebileyim.

gerçekten işim içinden çıkamadım yardım edecek birisi olsa çok iyi olurdu.


Çevrimdışı dellph

  • Delphi 1 Level 1
  • *
  • İleti: 1
  • Rep: +0/-0
Ynt: Aynı Tabloda Farklı Sorgulama Olayını Nasıl Yapabilirim
« Yanıtla #3 : 17 Şubat 2010 08:22:48 »
kardeşim ''desmalamın'' komutunu dene.

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.229
  • Rep: +55/-0
  • Cinsiyet: Bay
  • Falan filan ...
  • Delphi Sürümü: 2010 - XE2
Ynt: Aynı Tabloda Farklı Sorgulama Olayını Nasıl Yapabilirim
« Yanıtla #4 : 18 Şubat 2010 16:12:14 »
veritabanı ne kullanıyorsun ?



Amatör Küme Programcı

Çevrimdışı hhhccc70

  • Delphi 1 Level 1
  • *
  • İleti: 4
  • Rep: +0/-0
Ynt: Aynı Tabloda Farklı Sorgulama Olayını Nasıl Yapabilirim
« Yanıtla #5 : 24 Şubat 2010 20:22:56 »
veritabanı olarak mysql 5.0 kullanıyorum

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.229
  • Rep: +55/-0
  • Cinsiyet: Bay
  • Falan filan ...
  • Delphi Sürümü: 2010 - XE2
Ynt: Aynı Tabloda Farklı Sorgulama Olayını Nasıl Yapabilirim
« Yanıtla #6 : 26 Şubat 2010 03:26:10 »
yanlış bilmiyorsam eğer mysql 5 de trigger özelliği var mysql bilgim trigger yazacak kadar yok ama insert trigger olayı ile yapabilirsin .. Yeni bir kayıt eklediğinde eklenen kaydı veritabanı içersinde sorgulatıp 10 dan büyükse 10 kayıttsan sonrasını sildirebilirsin ... yada delphi tarafında bu işlemi yaptırabilirsin o da nasıl olur

Kod:  (Unknown Language)
  1. VAR
  2.  J : Integer;
  3. begin
  4.  
  5. with ADOQuery1 do
  6.   begin
  7.      Close;
  8.      SQL.Clear;
  9.      sql.Add('Select * from TABLON Where SORGULAMAKİSTEDİĞİNALAN=:P');
  10.      Parameters.ParamByName('P').Value := 'PARAMETRE DEĞERİN';
  11.      Open;
  12.   end;
  13.  
  14.     if ADOQuery1.RecordCount > 10 then
  15.      begin
  16.       for j := ADOQuery1.RecordCount -1 downto 10 do
  17.        begin
  18.          ADOQuery1.Delete;
  19.  
  20.           Application.ProcessMessages;
  21.           Caption := Format('Kalan : %d',[adoquery1.RecordCount]);
  22.        end;
  23.      end;
  24. End;

bu şekilde aradığın kriterde dönen değer 10 dan büyükse  10 tane kalana kadar siler ...



Amatör Küme Programcı