lostyazilim

Arkadaşlar çıldırıcam istemediğim halde olmamasını istediğim koşul oluyor

8 Mesajlar 1.174 Okunma
lstbozum
wmaraci reklam

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)
Arkadaşlar bir haber bildirim olayım var, facebook benzeri. Kişinin açtığı başlıklarda gelişen olayları Facebook ve bu sitedeki gibi bildirim panelinde gösteriyorum. Sorunum eğer başlık benimse yayınlandığı bildirimi veya takip ettiğim kullanıcıların benim açtığım başlıklarda yaptığı olayları bildirsin.

Açıklanması Gereken Değerler:
SahipID haber tablosunda haberin kime ait olduğunu belirtiyor.
Tur haberin ne olduğunu belirtiyor. Örnek 1 başlık açtı, 2 yorum ekledi, 3 yorum beğendi gibi düşünün.
kullanici_takip.KullaniciID bu kullanıcı takip tablomdaki takip eden kişiyi belirtiyor

Amaç: ya eklediğim başlıklar onaylanırsa bildir yada takip ettiğim kullanıcılar açtığım başlıklarda herhangi bir etkileşimde bulunduysa bana bildir.


Koşullarım:
(SahipID = BEN ve Tur = Başlık Açtı) anlamı başlık açıldı olacak veya
(SahipID = BEN ve kullanici_takip.KullaniciID = BEN ve haberler.KullaniciID != BEN ve Tur != Başlık Açtı) Anlamı takip ettiğim kullanıcılar açtığım başlıkta etkileşimde bulunacak. Sorunda burada, belirttiğim sadece takip ettiğim kullanıcılar olsun kısmı çalışmıyor. Takip etmediğim kullanıcıları da çekiyor.

SELECT haberler.KullaniciID, haberler.SahipID, basliklar.BaslikAdi, basliklar.SEO, secenekler.SecenekAdi, haberler.Tur, haberler.SahipGordu, haberler.EklendigiTarih HaberTarihi, kullanicilar.Isim, kullanicilar.Soyisim, kullanicilar.ProfilResmi
FROM haberler
LEFT JOIN basliklar ON haberler.BestofID = basliklar.BestofID
LEFT JOIN secenekler ON haberler.SecenekID = secenekler.SecenekID
LEFT JOIN kullanicilar ON haberler.KullaniciID = kullanicilar.KullaniciID
LEFT JOIN kullanici_takip ON haberler.SahipID = kullanici_takip.KullaniciID
WHERE (SahipID = 1 AND Tur = 1 AND haberler.KullaniciID = 1) OR (SahipID = 1 AND kullanici_takip.KullaniciID = 1 AND haberler.KullaniciID != 1 AND Tur != 1)
GROUP BY haberler.HaberID ORDER BY haberler.EklendigiTarih DESC LIMIT 10


Normalde mantıken haber ne olursa olsun biri başlığımda etkileşimde bulunursa bana bildir, bu sorunsuz çalışıyor ama işin içine sadece takip ettiğim kullanıcılar başlığımda etkileşimde bulunduğunda bildir olunca sorun çıkıyor.
 

 

wmaraci
reklam

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)
LEFT JOIN kullanici_takip ON haberler.SahipID = kullanici_takip.KullaniciID -> LEFT'i uçurun yada LEFT 'i INNER yapınız.

hatta tüm left 'leri kaldırınız.

Kesişim kümesi alırken LEFT JOIN'i neden kullandınız ki?
 

 

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

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)
sorun şu eğer başlığı ben açtıysam kendimi takip edemeyeceğim için kendi açtığım başlıkların haberi görünmeyecek çünkü JOIN olan tablonun tamamı dolu olması gerekmez mi?
 

 

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)
Aynen söylediğim gibi oluyor, kendi eklediğim başlıklar siliniyor ve yukarıdaki anlattığım olay devam ediyor
 

 

wmaraci
wmaraci

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)
join sadece ilişkili tabloların kesişimlerine(Foreign key ile değerinin kesişmesine) bakar, tamamının dolu olup, olmasına bakmaz.

Haber ile ilgili haberin sahibininde bilgi almasını istiyorsun aslında ondan left join'e yönelmişsin.

Haberi yaratanın kendisinide haber'e takipci olarak eklesek.

Eve geçince kafa yorayım.

istanbul, trafik malum.
 

 

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

HapyMan HapyMan Full Stack Developer Kullanıcı
  • Üyelik 14.05.2016
  • Yaş/Cinsiyet 32 / E
  • Meslek What do you do exactly ?
  • Konum İstanbul Avrupa
  • Ad Soyad T** T**
  • Mesajlar 562
  • Beğeniler 171 / 208
  • Ticaret 0, (%0)
bu kodu bana aciklarmisin ?



WHERE (SahipID = 1 AND Tur = 1 AND haberler.KullaniciID = 1) OR (SahipID = 1 AND kullanici_takip.KullaniciID = 1 AND haberler.KullaniciID != 1 AND Tur != 1)

 

 

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)
haberler Tablosunun içerisinde HabertID, KullaniciID, Tur, BaslikID, SahipID, SahipGordu,EklendigiTarih kolonları var.
kullanici_takip tablosunda KullaniciID, KullaniciTakipID kolonları var. KullaniciID beni temsil ediyor.

1. Kısım: SahipID haberin sahibi olan kişiyi temsil ediyor. Tur = 1 olan kısım 1 Başlık onaylandı uyarısı oluyor. Amaç ben başlık açtıysam onaylanınca haber ver.
2. Kısım: SahipID haberin sahibi olan kişiyi temsil ediyor. kullanici_takip.KullaniciID yine beni temsil ediyor. Amaç başlığın sahibi ben olsamda sadece benim takip ettiğim kişileri göstersin. haberler.KullaniciID != 1 AND Tur != 1 olan kısım ise kendi başlığıma yorum felan yaparsam da haberler.KullaniciID olan değer benim değerim olacağı için bana bildirim olarak görünecekti bu yüzden haberi açan kişi bana eşit olmasın dedik.

Kısaca:
SahipID haberin sahibini temsil ediyor.
haberler.KullaniciID ise haberi açan kişiyi temsil ediyor.
kullanici_takip.KullaniciID takip ettiklerim tablosunda beni temsil ediyor.
Tur olan kısım haberin ne olduğunu belirtiyor. 1 başlık açtı, 2 yorum yaptı falan filan.


Sorunu Yaratan Yer: 2. kısımda kullanici_takip.KullaniciID takip ettiklerimi çek demek oluyor kullanici_takip.TakipKullaniciID olan değerleri çek diyorum ama takip etmediğim bu kolonda olmayan kişileri de çekiyor.
 

 

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)
Tamam arkadaşlar SQL kodunu tekrar baştan farklı bir şekilde yazarak sorunumu çözdüm herkese teşekkürler.
 

 

wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al