Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
PARAMETERS Sira Short=1;
SELECT [Sira] AS VeriSirasi, Veri
FROM Tablo
where VeriID=74
ORDER BY ID;
Bir tablodan çektiğim verilere 1 den başlayıp numaralandırmak istiyorum. Bu sorguda Sira değişkenini 1 den başlatıp nasıl arttırabilirim. Burada VeriID yabancı anahtar (yada adı herneyse) sadece başka bir kullanıcıya ait verileri çekiyorum.
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
crossfire
izmir
Kayıt: 20.07.2008 |
|
Numaralandırma işini neden veritabanı motoruna yaptırmak istiyorsun?
http://support.microsoft.com/kb/186133
Linkteki örnekleri incele istersen. Ama eğer gerçekten zorunluluğun yoksa bu işi uygulama programına yaptırman çok daha uygun.
robotum, robotsun, robot
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
aliprinter yazdi
Teşekkürler problemi hallettim.
crossfire yazdi | Numaralandırma işini neden veritabanı motoruna yaptırmak istiyorsun?
http://support.microsoft.com/kb/186133
Linkteki örnekleri incele istersen. Ama eğer gerçekten zorunluluğun yoksa bu işi uygulama programına yaptırman çok daha uygun. |
Fazladan onbinlerce int tutmak olur bu benim için. Otomatik sayı verdirmek daha iyi bence.
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
crossfire
izmir
Kayıt: 20.07.2008 |
|
Fazladan "onbinlerce" int tutmak mı? Nasıl bir mimari çok merak ettim.
robotum, robotsun, robot
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
crossfire yazdi | Fazladan "onbinlerce" int tutmak mı? Nasıl bir mimari çok merak ettim. |
O tabloda herbir kayıt bir satranç hamlesini tutuyor "d2d4" gibi. Her satranç oyunu 100 hamle olsa. şuanda bile 100 oyun var kayıtlı 10000 hamle oluyor. zaten. Hamlelerin ID si, Masa Numarası tutuluyo. bende oyun açıldığında sıralı yazdırmak isyiyorum sayfaya. ilk hamleden sonra hamleye. o yüzden sıralarını yazdırmak istedim ama ID değişkeni diğer oyunlarla ortak oluğu için sıra vermiyor. o yüzden 1 den artan bi değişken lazımdı.
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
crossfire
izmir
Kayıt: 20.07.2008 |
|
Veritabanından çektiğin kayıtları ekrana bir loop içinde yazdırmıyor musun? Loop başlangıcında bir değişkene 1 değerini atarsın, her iterasyonda da bu değişkeni sıra numarası diye yazdırıp değerini 1 arttırırsın. Burada on binlerce değil sadece 1 tane int söz konusu olur. Diğer türlü (sql ile) yaptığında bellekteki data kümesi her bir kayıt için fazladan 1 tane int tutmuş olacak.
robotum, robotsun, robot
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
crossfire yazdi | Veritabanından çektiğin kayıtları ekrana bir loop içinde yazdırmıyor musun? Loop başlangıcında bir değişkene 1 değerini atarsın, her iterasyonda da bu değişkeni sıra numarası diye yazdırıp değerini 1 arttırırsın. Burada on binlerce değil sadece 1 tane int söz konusu olur. Diğer türlü (sql ile) yaptığında bellekteki data kümesi her bir kayıt için fazladan 1 tane int tutmuş olacak. |
aliprinter yazdi | ROW_NUMBER() fonksiyonu SQL Server'da var, ancak anladığım kadarıyla MSAccess'te geçerli olmayan bir fonksiyon.
İstediğin işlemi başka türlü doğal yollarla şöyle gerçekleştirebilirsin sanırım:
SELECT InPersonId, StName, (SELECT COUNT(*) FROM TbPerson WHERE TbPerson.InPersonId <= e.InPersonId AND InPersonId > 0) AS ROWNUM
FROM TbPerson e WHERE InPersonId > 0 |
Bu mantıkla direk bir gridview'e çekiyorum.
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
crossfire
izmir
Kayıt: 20.07.2008 |
|
extreme yazdi | Bu mantıkla direk bir gridview'e çekiyorum. |
Şunu baştan desene Ben data akışını kendi yazdığın arayüz ile sağladığını varsayarak yorum yaptım.
robotum, robotsun, robot
|
|
Yazar |
|
orhan
istanbul
admin
Kayıt: 17.11.2005 |
|
extreme yazdi |
SELECT InPersonId, StName, (SELECT COUNT(*) FROM TbPerson WHERE TbPerson.InPersonId <= e.InPersonId AND InPersonId > 0) AS ROWNUM
FROM TbPerson e WHERE InPersonId > 0 |
veritabanında bir key tutmak yerine her satır için subquery mi yapacaksın ? :) çok kötü bir tasarım bu.
N/A
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
orhan yazdi | extreme yazdi |
SELECT InPersonId, StName, (SELECT COUNT(*) FROM TbPerson WHERE TbPerson.InPersonId <= e.InPersonId AND InPersonId > 0) AS ROWNUM
FROM TbPerson e WHERE InPersonId > 0 |
veritabanında bir key tutmak yerine her satır için subquery mi yapacaksın ? :) çok kötü bir tasarım bu. |
Göründüğü kadar kötü değil. Bi tabloda oyunda yapılan hamleleri tutuyorum. id ler var ama id ler bütün masalar için ortak. sadece bir masanın hamlelerini görüntülüyorum, Veriler sıralı bana sadece numaralandırmak kalıyor. Boşyere bir değişken daha kullanmamak için böyle yaptım.
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
Bence tabloda yeni bir alan oluştur "Sira" diye. Kullanıcının ilk hamlesi sonucunda ilk eklenecek satır için "Sira" değeri 1 olur. Her hamle sonunda o kullanıcı için yeni eklenecek kayıtta "Sira" değeri öncekilerin en büyüğünden 1 fazla ya da önceki kayıt sayısından 1 fazla olur (ikisi de aynı sayı). 2 sorguyla (sistem insert işleminde hedef tablodan veri çekmeye izin veriyorsa tek 1 iç içe SELECT ile) ya da eğer SP kullanıyorsan tek bir SP içinde halledebilirsin. Bu işlemi belirli bir kullanıcı için yapacağından numaralandırmada sorun olmaz (eğer aynı kullanıcı kimliği ile aynı anda çoklu oturum söz konusu değil ise). En sonunda listelerken istersen "ORDER BY ID", istersen "ORDER BY Sira" dersin ve sonuçları yazdırırsın. Bu durumda her kayıt için disk üzerinde 4 byte fazladan yer tutmuş olursun ama sırf numaralandırmak için karmaşık SQL cümleleri kullanmak zorunda kalmadığın gibi listeleme işi daha performanslı olur.
Let`s make this world a better place to live !
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | | | | | |