lostyazilim
tr.link

Order By Ve Group By Saçmalığı!

11 Mesajlar 2.225 Okunma
acebozum
tr.link

brkrtp 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ı?
 

 

wmaraci
reklam

tiwaly 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ı
 

 

brkrtp 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)

tiwaly adlı üyeden alıntı

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ı


O şekilde çalışmıyor malesef
mysql_fetch_array() expects parameter 1 to be resource, boolean gi
ORDER BY s.tarih DESC GROUP by uyeler.id
 

 

tiwaly 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
 

 

wmaraci
wmaraci

brkrtp 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)

tiwaly adlı üyeden alıntı

Önce group sonra order by. Desc en sona

GROUP by uyeler.id ORDER BY s.tarih DESC


Bu şekilde olunca zaten s.tarih sıralaması olmuyor

Ek Olarak: Group olarak filtrelediğimiz için tarih kısmına önem vermiyor çözemedim
 

 

tiwaly 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.
 

 

brkrtp 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)

tiwaly adlı üyeden alıntı

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.


Denedim malesef çalışmıyor bu şekilde

Ek Olarak: Yine en son gruplandırdıgı için tarihe göre sıralamamız bir anlam ifade etmiyor
 

 

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Ü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 ;)
tiwaly

kişi bu mesajı beğendi.

https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)

brkrtp 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)

Turgay Can adlı üyeden alıntı

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.




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.



tahminimce işinizi görecektir ama tablo ve contraintleri bilmek gerek yinede ;)


Yazdıgınız şekilde bu oluyor

Select uyeler.* from uyeler left outer join sohbet on uyeler.id=sohbet.kim or uyeler.id=sohbet.kime where uyeler.id IN (select kimle from arkadas where kim=86) group by uyeler.id order by sohbet.zaman DESC

Fakat bu haldede çalışmıyor. Ben sohbette en son yazan kişiye en üstte göstermek istiyorum.
Sohbet tablom http://prntscr.com/522vbz
uyeler tablom http://prntscr.com/522vif
arkadaş tablomdada kim kimle diye iki sütün var.
 

 

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Ü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)
wmaraci
wmaraci
Konuyu toplam 2 kişi okuyor. (0 kullanıcı ve 2 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al