v2.5.2
Giriş yap

iki tabloyu birleştirip çoklu sorgu almak

burak001
523 defa görüntülendi

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

Cevap yaz
Cevaplar (8)
burak001
965 gün önce

baktım böyle uğraşılacak gibi değil bende tek tablodan çekiyorum artık tablo yapısı 2 tablonun birleşimi gibi oldu
begenimi yorummu ona göre kolonlar hazırladım rahatça kontrol ediyorum

makifgokce
967 gün önce

Aşağıda tablo yapısını atmışsın.Hem tablo yapısını hemde tablodaki veriyi atabilirmisin.

burak001
967 gün önce

@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=?";
makifgokce
967 gün önce
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.

burak001
967 gün önce

@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
burak001
969 gün önce

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

tayfunerbilen
969 gün önce

ilgili tablolarını http://sqlfiddle.com/ adresinden oluşturup bize linkini verebilirsen daha kolay yardımcı olabiliriz.

rephp7
969 gün önce

sonuna order by yorumlar.gorulme desc ekle.