-
Ü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.
-
Ü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)
-
Ü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?
-
Ü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
-
Ü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
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
561
-
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)
-
Ü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.
-
Ü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.