brkrtp
Mobile App Developer
Kullanıcı
-
Üyelik
24.08.2013
-
Yaş/Cinsiyet
31 / E
-
Meslek
Mobile App Developer
-
Konum
İstanbul Anadolu
-
Ad Soyad
B** K**
-
Mesajlar
964
-
Beğeniler
269 / 251
-
Ticaret
31, (%97)
Arkadaşlar merhaba
iki tablom var ve birini ötekisinin tarihine göre sıralamak istiyorum.
Gelin görün ki group by kullanmassam ilk tablodaki verileri defalarca veriyor kullanırsam da sql deki order by zaman desc sorgumu hiçe sayıyor bu iki sorguyu nasıl bir arada kullanacagım ben?
Mantıken yapılması gereken işlem önce zamana göre sıralamak sonra gruplayarak tekrar eden verileri göstermemesini sağlamak nedir bunun ilacı?
tiwaly
NodeJS / PHP / NoSQL
Kullanıcı
-
Üyelik
10.10.2013
-
Yaş/Cinsiyet
34 / E
-
Meslek
Yazılımcı
-
Konum
İzmir
-
Ad Soyad
i** A**
-
Mesajlar
363
-
Beğeniler
135 / 104
-
Ticaret
7, (%100)
order by en sonda olmalı örnek olarak
select title, count(*) AS Number
from employee
GROUP BY title
ORDER BY Number;
Aralarında and , or olmamalı
tiwaly
NodeJS / PHP / NoSQL
Kullanıcı
-
Üyelik
10.10.2013
-
Yaş/Cinsiyet
34 / E
-
Meslek
Yazılımcı
-
Konum
İzmir
-
Ad Soyad
i** A**
-
Mesajlar
363
-
Beğeniler
135 / 104
-
Ticaret
7, (%100)
Önce group sonra order by. Desc en sona
GROUP by uyeler.id ORDER BY s.tarih DESC
tiwaly
NodeJS / PHP / NoSQL
Kullanıcı
-
Üyelik
10.10.2013
-
Yaş/Cinsiyet
34 / E
-
Meslek
Yazılımcı
-
Konum
İzmir
-
Ad Soyad
i** A**
-
Mesajlar
363
-
Beğeniler
135 / 104
-
Ticaret
7, (%100)
SELECT *
FROM (
SELECT *
FROM questions
ORDER BY id DESC
) AS questions
GROUP BY questions.asker
Yukarıdaki gibi bir kullanım şekli daha var. Denemedim ama çalışabilir belki.
-
Üyelik
25.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Engineering Director
-
Konum
İstanbul Avrupa
-
Ad Soyad
T** C**
-
Mesajlar
771
-
Beğeniler
2 / 260
-
Ticaret
0, (%0)
SQL cümlelerin çalışması sırası vardır.
Bu sıralamada Group (Gruplama), Order (Sıralama) ikilisi arasında en son her daim Order çalışacaktır.
SELECT *
FROM (
SELECT *
FROM questions
ORDER BY id DESC
) AS questions
GROUP BY questions.asker
arkadaşımızın yazdığı bu sql cümlesinde sub query oluşturduğu için order ezilir. Çünkü alt kümeden gelen data sıralı olasada asıl query'de sıralı gelen datayı group ladığınız için group by sıranızı elbet bozacaktır.
Şimdi sorunuz için tablo yapınızı ve bağlantılarını paylaşmanız gerekecektir.
Select t1.* from table1 t1 left outer join table2 t2 on t1.id = t2.t1_id group by t1.column1 order by t2.date desc;
tahminimce işinizi görecektir ama tablo ve contraintleri bilmek gerek yinede ;)
1 kişi bu mesajı beğendi.
https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)
-
Üyelik
25.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Engineering Director
-
Konum
İstanbul Avrupa
-
Ad Soyad
T** C**
-
Mesajlar
771
-
Beğeniler
2 / 260
-
Ticaret
0, (%0)
Örnek üzerinden gidelim daha oturaklı olur.
Turgay, Ahmet ile konuşuyor. Turgay ile ahmet 'te arkadaş zaten arkadaş olmadan konuşabilme olayının olmadığını ön görüyorum.
Turgay'ın uye id'si = 86 olsun.
Sohbet üzerinden en son konuştuğu kişileri zaman sutununa göre filtremem gerekli.
select * from sohbet where kim = 86 order by zaman desc;
bu bana sohbet ettiğim kişilerin listesini sondan başa doğru verdi.
arkadaş tablosuna gerek varmı? sohbet özelliği için, zaten arkadaşlar birbirleri ile konuşabilir kısıtlaması uygulama bazında yapılmışken.. Ön görüm bu şekildeydi.
Konuşma barında arkadaşlarımıda göstermek istiyorsam.
şöyle bir yapı olmalı. arkadaş tablom üzerinde iki tane alan olmalı,
Arkadas tablosu lookup tablosu mantığında olmalı, ben uye_id'ye göre arkadas_id listesini aldığımda bana uye'nin tüm arkadaşlarını vermeli.
uye_id, arkadas_id
select * from uyeler where id in (select arkadas_id from arkadas where uye_id =86);
Arkadaşım olan uyeleri listeledim.
Şimdi sorunun cevabı ;
Arkadaşım olan kişileri zamana göre sondan başa göre listeleyelim. Burada sadece sohebt tablosu üzerinde daha önceden sohbet ettiklerimimi yoksa sohbet etmediklerimide listeyelim gibi soru oluşuyor. Ben etmediklerinide baz alıp, ona göre listeliyorum.
arkadas
uye_id arkadas_id
86 1
86 2
86 3
uyeler
id ad
86 turgay
1 ahmet
2 özlem
3 merve
sohbet
kim kime zaman
86 1 30ekim
86 2 1kasım
86 3 31ekim
Yukarıdaki şemaya göre bu şekilde rahatça üyeler listelenebilir. Ek olarak arkadaş kontrolü eklemek isterseniz bana göre saçma, çünkü arkadaş dışında sohbet edemez kontrolünü düşündüğümüzde.
select u.* from uyeler where id in (
select a.arkadas_id from sohbet s left outer join arkadas a on a.arkadas_id=s.kime
where s.kim = 86 order by s.zaman desc);
Eğer arkadaş dışında kimse ile konuşamaz kontrolü varsa,
sohbet tablosu direkt uyeler tablosu ile join edilmesi yeterli olacaktır.
https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)