IN kullanımı sırasında Sıralama sorunu

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
webaytek
Üye
Mesajlar: 377
Kayıt: 23 Haz 2004 10:58

IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen webaytek »

SQL Server 2000 ile çalıştığım bir ASP.NET programında sıralama yapmamı gerektiren bir durum oluştu.

SELECT * FROM sn_users as u, sn_users_details as ud WHERE u.UserID = ud.UserID and u.UserID IN (3396,2420,3395,3394,3393,3392,3391,3390,3389,3388,3387,3386,3385,3384,3383,3382,3381,3380,3379,3378,3377,3376)

örnek sql bu... benim sorum da şu...
sırasıyla gelen ID'lere bakarak kayıtları nasıl çekeriz...

Detaylı olarak da durumu anlatayım...
IN içerisinde geçen ID'ler önceden belirli tablolardan toparlanmış IDler... hepsi esasen kullanıcı ID'leri... ve sonuç olarak tek bir tablodan yani user tablosundan sorgulama yaparak gösterim yapılacak... Ancak ID'ler orjinal sırasında gelmesine rağmen (IN içerisinde olduğundan diye tahin ediyorum) sonuçları sıralayarak bana sunuyor...

yani
3396,2420,3395,3394,3393,3392,3391,3390,3389,3388,3387,3386,3385,3384,3383,3382,3381,3380,3379,3378,3377,3376 bu sıra
2420 ile başlayıp 3396 ile biten sıralı bir sonuç alıyorum... Verdiğim ID sıralamasıyla sonucu alabilir miyim... Sıradan bir parametre ise nedir? Başka alternatif yol önerecek biri var mı... sorgunun SQL üzerinden sıralı gelmesi şart... ASP.NET'te sonra sen sırala demezseniz sevinirim onu yapabiliyorum ama işime gelmiyor...
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen unicorn64 »

sn_users tablosundaki primary key, index gibi tanımlamalar neler?
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
webaytek
Üye
Mesajlar: 377
Kayıt: 23 Haz 2004 10:58

Re: IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen webaytek »

öncelikle ilgilendiğiniz için teşekkür ediyorum unicorn64...

sn_users > UserID longint unsigned Null:NO PRIMARY Key auto_increment
INDEX > UserID PRIMARY UNIQUE başka index yok.

sn_users_details > UserID longint Null:NO PRIMARY Key fakat auto_increment değil (doğal olarak)
INDEX > UserID PRIMARY UNIQUE başka index yok.

@unicorn64 çok özür diliyorum ukalalıktan değil ama lütfen yanlış anlaşılmasın... soru olarak alın: bu bilgi sorunun çözümünde ne işe yarayacak?
ben sanki IN (x,t,z,u,k) bunu kullanımının ORDER BY veya SELECT'e konacak bir parametre ile düzeleceğine inanarak arama yaptım sonuç alamadım da... yukarıdaki sorunuzun cevabına göre düşüncem yanlış çıkıyor da çözümdeki etkisi ne olacak onu merak ettim...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4321
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen aslangeri »

s.a.
stored procedure ile yapılabilir kanısındayım.
in ile gönderdiğin id ler tek bir string parametre olarak gönderirsin. :ara split fonksiyonu ile id leri tek tek alıp user tablosundan tek tek select yaparsın.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
webaytek
Üye
Mesajlar: 377
Kayıt: 23 Haz 2004 10:58

Re: IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen webaytek »

Temporary Table veya View oluşturmak
Anlık sorgulama verisi almamı gerektirdiği için mümkün değil

ASP içerisinden yapmak
Veritabanının yapabileceğini zannettiğim işi ASP'ye yüklemek gibi bi iş yapmak istemiyorum. Zaten bu ID sıralamasını çıkartan ASP'nin ta kendisi...

Tek tek sorgu yapabileceğim bir durum değil: ID sayısı buraya örnekte yazdığım kadar kısa değil... 1 sayfa falan sürüyor... Her seferinde 1 sorgu yapmak hiç anlamlı gelmedi bana...

4.cü bir yol bilen varsa lütfen yardımcı olsun...
IN içerisine verdiğim sırada sıralama yapılması SQL tarafında İmkansız olmaması lazım!!!

Yani 2 tane tablom ve 2tane timestamp im var... ve sorgulama yapıcam... 2 tabloda ayrı ayrı UNION ile timestample sıralayıp ID leri topluyorum...
IN ile verilen sırada sıralama yapılması konusu benden önce birisinin aklına gelip yapılmış bişeydir diye inanıyorum...
hiçkimsenin ihtiyacı olmadı mı böyle birşeye yani???
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen Hakan Can »

SQL cümlesinde "CASE WHEN .. ELSE .. END" kullanarak istediğin sıralamada sonuç alabilirsin. Misal:

Kod: Tümünü seç

SELECT
  T1.UserID
FROM
 (
  SELECT
    CASE WHEN U.UserID = 3396 THEN 1
         WHEN U.UserID = 2420 THEN 2
         WHEN U.UserID = 3395 THEN 3
         WHEN U.UserID = 3394 THEN 4
         WHEN U.UserID = 3393 THEN 5 END AS SIRA_NO,
    U.UserID
  FROM sn_users U
  WHERE U.UserID IN (3396, 2420, 3395, 3394, 3393)
 ) T1
ORDER BY T1.SIRA_NO
Kullanıcı avatarı
webaytek
Üye
Mesajlar: 377
Kayıt: 23 Haz 2004 10:58

Re: IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen webaytek »

Bu tarz bir kullanımdan da haberdar değildim...

@Hakan Can çok teşekkür ederim. Uyguladım ve kesin sonuç. :bravo:
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen unicorn64 »

sorunu çözdüğünüze sevindim. hafta sonu nete giremediğim için ancak görebildim mesajları.
diğer sorunuza gelince yanlış bilmiyorsam order by kullanmadan yapılan sorgulamalarda bu key alanları kullanılarak sıralama yapılıyor.
onun için sormuştum neler tanımlı diye...
UserID alanı primarykey olduğu için o alana göre artan sırada geliyor sonuçlarınız...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
webaytek
Üye
Mesajlar: 377
Kayıt: 23 Haz 2004 10:58

Re: IN kullanımı sırasında Sıralama sorunu

Mesaj gönderen webaytek »

yapma yahu!!! :(
cidden onu da deneme şansım olmamış @unicorn64 ama dediğiniz durumu bilmek de yapıyı kurarken acayip işe yarar tabi...
O durumda olan bir tablom olmadığı için deneme şansım olmadı ama cidden işe yarar bilgiler...

Ellerinize sağlık.
KOLAY GELSİN
Cevapla