iki tabloyu birleştirip çoklu sorgu almak
arakadaşlar bildirim sistemi yapıyorum ve uzun zamndır bu sorunu çözemedim
iki tane tablom var
-yorumlar -begeniler
bu tabloları Yorumyapılan veya begenilen kişinin Id sine göre eşitliyorum
örenk olarak
SELECT * FROM yorumlar INNER JOIN begeniler ON yorumlar.kisiId = begeniler.kisiId
buraya kadar tamam ama bu bildirimlerin görülme durumlarına göre çekmek için
tablodaki görülme kolonu için de bunun üzerine bir sorgu oluşturmam gerek
yapamıyorum sürekli hata alıyorum ya da anlamsız veri döndürüyor
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (8)
Aşağıda tablo yapısını atmışsın.Hem tablo yapısını hemde tablodaki veriyi atabilirmisin.
@makifgokce evet dediğin gibi yapınca çalışmaya başladı ama doğru sonucu alamıyorum dönen satır sonucunu 5 göstermesi gerekirken
3 gösteriyor sorgu şöyle
"SELECT begeniler.kullaniciId, begeniler.Mgorulme, yorumlar.kullaniciId, yorumlar.Tgorulme
FROM begeniler
INNER JOIN yorumlar ON yorumlar.personOwnerId = yorumlar.personOwnerId
WHERE begeniler.kullaniciId=? AND yorumlar.kullaniciId=? AND
begeniler.Mgorulme=? AND yorumlar.Tgorulme=?";
WHERE begeniler.kullaniciId = 1 , begeniler.gorulme = 0 yorumlar.gorulme = 0
yukarıdaki kullanım yanlış o yüzden sorun yaşıyorsun :)
aşağıdaki gibi değiştir.
WHERE begeniler.kullaniciId = 1 AND begeniler.gorulme = 0 AND yorumlar.gorulme = 0
WHERE den sonra birden fazla koşul gireceksen AND
veya OR
kullanman gerekir.
AND
ve OR
if kullanımındaki gibi AND
= &&
, OR
= ||
Ek olarak SELECT
kısmında tablolardan neyi çekeceksen tablosuyla birlikte yazmalısınki çakışmasın.
SELECT begeniler.kullaniciId, begeniler.begenenId, yorumlar.yorumYapanId FROM
INNER JOIN
de 2 tablodada kullaniciId = 1
'in verisi olmak zorunda.Birinde o kullanıcıya ait veri var diğerinde yoksa sonuç alamazsın.
@tayfunerbilen o editör karışık geldi yapamdım buraya yazayım
begeniler tablom
CREATE TABLE `begeniler`
(
`begeniId` INT(2) NOT NULL AUTO_INCREMENT ,
`begenilenId` INT(2) NOT NULL ,
`begenenId` INT(2) NOT NULL ,
`gorulme` INT NOT NULL DEFAULT '0' ,
`tarih` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`begeniId`)
);
yorumlar tablom
CREATE TABLE `yorumlar`
(
`yorumId` INT(2) NOT NULL AUTO_INCREMENT ,
`yorumYapilanId` INT(2) NOT NULL ,
`yorumYapanId` INT(2) NOT NULL ,
`gorulme` INT NOT NULL DEFAULT '0' ,
`tarih` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`yorumId`)
);
amacım bu iki tablodan yorumyapilaId ve begenilenId si kullanıcının id sine eşit olan ve gorulmesi 0 yani görülmemiş olanları
çekmek
gorulme tarhine göre değil bizzat görülmüş mü görülmemişmi diye kontrol edeceğim 0 ve 1 le
şöyle yapmayı denedim
$sql_sorgusu = "SELECT * FROM begeniler INNER JOIN yorumlar ON begeniler.kullaniciId = yorumlar.kullaniciId
WHERE begeniler.kullaniciId = 1 , begeniler.gorulme = 0 yorumlar.gorulme = 0";
ama çalışmıyor
ilgili tablolarını http://sqlfiddle.com/ adresinden oluşturup bize linkini verebilirsen daha kolay yardımcı olabiliriz.