lostyazilim
tr.link

MYSQL İki kez sıralama

11 Mesajlar 2.311 Okunma
acebozum
tr.link

viper302 viper302 WM Aracı Kullanıcı
  • Üyelik 09.08.2014
  • Yaş/Cinsiyet 37 / E
  • Meslek Siber Güvenlik Danışmanı
  • Konum İstanbul Anadolu
  • Ad Soyad K** A**
  • Mesajlar 294
  • Beğeniler 19 / 26
  • Ticaret 3, (%100)
Merhaba arkadaşlar bir mesajlaşma sistemi düşünün, aynı whatsapp gibi sabit yap dendiğinde mesaj yukarı sabitlensin istiyorum ama birden fazla sabit mesaj varsa kendi aralarında son gelen üst tarafta olsun istiyorum. Sorgu bence doğru ama nedense doğru sıralanmıyor.

SELECT DISTINCT (SELECT gonderen_id FROM mesajlar WHERE mesaj_id = mesajlar.mesaj_id ORDER BY ozel_mesaj DESC LIMIT 10) gonderen_id FROM mesajlar WHERE alici_id = 1 ORDER BY mesaj_id DESC


  • Arkadaşlar tüm kolonlar int,

  • ozel_mesaj varsayılan 0 eğer 1 olursa sabit oluyor

  • Sıralama şekli önce ozel_mesaj yani sabit mesajlar üstte olacak şekilde sıralanacak

  • Daha sonra ozel_mesaj değeri 1 olanlar kendi aralarında, değeri 0 olanlarda kendi aralarında sıralanacak

  • Yani; sabit olan mesajlar (ozel_mesaj = 1) kendi aralarında son eklenenler üstte olacak daha sonra sabit olmayanlar (ozel_mesaj = 0) kendi aralarında son eklenenler üstte olacak

  • Kısaca Whatsapp'ta olduğu gibi olacak. Sistem tamam ama sadece SQL kodu yanlış çekiyor


Yukarıdaki kod mantığa göre doğru çekmesi lazım ama olmuyor bir türlü. Saatlerdir sürekli sorguyu baştan farklı şekillerde denedim ama olmuyor. Acaba bir fikri olan varmı arkadaşlar?
 

 

wmaraci
reklam

youngwolf youngwolf Kimlik Onayı Bekliyor Banlı Kullanıcı
  • Üyelik 24.01.2018
  • Yaş/Cinsiyet 25 / E
  • Meslek öğrenci
  • Konum Denizli
  • Ad Soyad O** A**
  • Mesajlar 208
  • Beğeniler 62 / 32
  • Ticaret 0, (%0)
if else ile dene bence . son mesaj tarihi falan varsa onu kullanarak sıralayabilirsin
 

 

soulmy soulmy WM Aracı Kullanıcı
  • Üyelik 12.06.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Öğretmen
  • Konum Samsun
  • Ad Soyad O** Y**
  • Mesajlar 1722
  • Beğeniler 398 / 400
  • Ticaret 20, (%100)
SQl sorgunun sıralama kısmını
ORDER BY `ozel_mesaj` DESC, `mesaj_id` DESC
şu şekilde yapıp dener misiniz?
 

 

.

viper302 viper302 WM Aracı Kullanıcı
  • Üyelik 09.08.2014
  • Yaş/Cinsiyet 37 / E
  • Meslek Siber Güvenlik Danışmanı
  • Konum İstanbul Anadolu
  • Ad Soyad K** A**
  • Mesajlar 294
  • Beğeniler 19 / 26
  • Ticaret 3, (%100)
Cevabınız için teşekkürler, normalde bu basit sorgunun işimi görmesi lazım ama nedense doğru sıralamıyor.


SELECT DISTINCT gonderen_id FROM mesajlar WHERE alici_id = 1 ORDER BY ozel_mesaj DESC, mesaj_id DESC


2 gündür 100 den fazla sorgu denedim ama bir türlü düzeltemedim.
 

 

wmaraci
wmaraci

hdursun hdursun WM Aracı Kullanıcı
  • Üyelik 06.05.2018
  • Yaş/Cinsiyet 41 / E
  • Meslek serbest meslek
  • Konum Ankara
  • Ad Soyad H** D**
  • Mesajlar 25
  • Beğeniler 4 / 7
  • Ticaret 0, (%0)
Verileri kontrol ettiniz değil mi
 

 

hdursun hdursun WM Aracı Kullanıcı
  • Üyelik 06.05.2018
  • Yaş/Cinsiyet 41 / E
  • Meslek serbest meslek
  • Konum Ankara
  • Ad Soyad H** D**
  • Mesajlar 25
  • Beğeniler 4 / 7
  • Ticaret 0, (%0)
Oncelikle mesaj ve gönderen aynı tabloda heralde veri tabanında aslında kullanıcılar ile mesajları ayirsan mantıklı olabilir. Mesajlar tablosunda gönderen id üzerinde join yapar sıraların
 

 

viper302 viper302 WM Aracı Kullanıcı
  • Üyelik 09.08.2014
  • Yaş/Cinsiyet 37 / E
  • Meslek Siber Güvenlik Danışmanı
  • Konum İstanbul Anadolu
  • Ad Soyad K** A**
  • Mesajlar 294
  • Beğeniler 19 / 26
  • Ticaret 3, (%100)
çok basit bir tablo yapısı, sadece ozel_mesaj olan kısım yeni gelen mesajlarda 0 olarak varsayılan olarak eklenecek ama şuan değerler normal 3 kişiden mesaj alınmış durumda ve 2 tanesi özel mesaj 1 tanesi normal mesaj. 2 tane ayrı sorgu yapıp özel mesajları ayrı normal mesajları ayrı çekmek sistemi yorar diye düşünüyorum. Yapamazsam mecburen böyle yapacağım.

Tablo Adı: mesajlar > kolonların hepsi int, icerik tablosu text
Kolonlar: mesaj_id, gonderen_id, alici_id, ozel_mesaj, icerik, eklendigi_tarih
 

 

viper302 viper302 WM Aracı Kullanıcı
  • Üyelik 09.08.2014
  • Yaş/Cinsiyet 37 / E
  • Meslek Siber Güvenlik Danışmanı
  • Konum İstanbul Anadolu
  • Ad Soyad K** A**
  • Mesajlar 294
  • Beğeniler 19 / 26
  • Ticaret 3, (%100)

hdursun adlı üyeden alıntı

Oncelikle mesaj ve gönderen aynı tabloda heralde veri tabanında aslında kullanıcılar ile mesajları ayirsan mantıklı olabilir. Mesajlar tablosunda gönderen id üzerinde join yapar sıraların


aslında bu yapmaya çalıştığım kısım whatsapp web te sol taraftaki menü, mesajları listelemekte sıkıntım yok zaten socket kullanıyorum. Problem sol taraftaki menüde sabit yap dediğimde sabit olan konuşma en üstte dursun istiyorum. Ve kendi aralarında son gönderilen mesaj en üstte olsun istiyorum. Son eklenen mesajları Distinct ile tekrarlanmasını engellemek daha sonra önce özel ve normal mesaj olarak ikiye ayırıp tekrar kendi aralarında yeniden eskiye doğru sıralamak. Özel mesajlar üstte sıralanacak normal mesajlar altta sıralanacak

EK: ayrıca bir şeyi fark ettim DISTINCT komutunu sildiğimde tam istediğim şekilde sıralanıyor ama veriler kendisini tekrar ediyor. Group BY de ekleyince aynı şekilde sıralama şaşıyor.
 

 

hdursun hdursun WM Aracı Kullanıcı
  • Üyelik 06.05.2018
  • Yaş/Cinsiyet 41 / E
  • Meslek serbest meslek
  • Konum Ankara
  • Ad Soyad H** D**
  • Mesajlar 25
  • Beğeniler 4 / 7
  • Ticaret 0, (%0)

viper302 adlı üyeden alıntı

çok basit bir tablo yapısı, sadece ozel_mesaj olan kısım yeni gelen mesajlarda 0 olarak varsayılan olarak eklenecek ama şuan değerler normal 3 kişiden mesaj alınmış durumda ve 2 tanesi özel mesaj 1 tanesi normal mesaj. 2 tane ayrı sorgu yapıp özel mesajları ayrı normal mesajları ayrı çekmek sistemi yorar diye düşünüyorum. Yapamazsam mecburen böyle yapacağım.

Tablo Adı: mesajlar > kolonların hepsi int, icerik tablosu text
Kolonlar: mesaj_id, gonderen_id, alici_id, ozel_mesaj, icerik, eklendigi_tarih

Şöyle düşünürsek mesajlar alıcının mesajları mesajları kullandığın yerde alıcı id sini yakalayabiliyor isen where koşuluna yazıp order by ozel_mesaj desc, eklendigi_tarih desc yapman yeterli distinct veya grouo by killanmana gerek yok diye düşünüyorum
 

 

viper302 viper302 WM Aracı Kullanıcı
  • Üyelik 09.08.2014
  • Yaş/Cinsiyet 37 / E
  • Meslek Siber Güvenlik Danışmanı
  • Konum İstanbul Anadolu
  • Ad Soyad K** A**
  • Mesajlar 294
  • Beğeniler 19 / 26
  • Ticaret 3, (%100)
Ama veriler kendini tekrar ediyorlar. Doğru anladıysam söylediğiniz şekil aşağıdaki gibi oluyor sanırım. Bu seferde mesaj arttıkça kendini sürekli tekrar edecek.


SELECT gonderen_id FROM mesajlar WHERE alici_id = 1 ORDER BY ozel_mesaj DESC, eklendigi_tarih DESC
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al