Merhaba, bu yazımda sizlere birincil olanı asıl tablo olan 4 tablonun MYSQL üzerinde birleştirerek LEFT JOIN  ile tek sorguda sonuçlandırmayı göstereceğim. Bu tablolar aynı değer ile kayıtlı satır Id numaralarıyla 4 tabloyu birleştiriyoruz. Genel olarak icerik_id sütunu bütün tablolarda ortak olduğunu düşünelim. bu sayede LEFT JOIN ile sorgu esnasında icerik tablosunda var olan iceriğin, icerik_id değerini okumalar, yorumlar ve rating adlı tablolarda var olan karşılığını select ile belirttiğimiz sütunları sorguya ekledik.

İlk sorgu bu şekilde birincil tablo icerik;

SELECT 
distinct 
y.icerik_id,
y.icerik_id  id,
 y.icerik_resim,
  y.icerik_tur,
   y.icerik_konu,
    y.icerik_tarih FROM icerik y ORDER BY id DESC

 

 İkinci tablo sorgusu LEFT JOIN ile okumalar;

SELECT 
distinct 
y.icerik_id,
y.icerik_id  id,
 y.icerik_resim,
  y.icerik_tur,
   y.icerik_konu,
    y.icerik_tarih,
     u.icerik_id,
     u.begeni,
     u.hit FROM icerik y LEFT JOIN okumalar u ON u.icerik_id = y.icerik_id  ORDER BY id DESC

 

 Üçüncü tablo sorgusu LEFT JOIN ile yapılıyor bu sorguda tablo adından da anlaşılacağı üzere oylamaların tutulduğu bir tablo türü, bu sorgu esnasında AVG ve ROUND fonksiyonu ile icerikle ilgili satırın var olan rating karşılığında ortalama değeri öğrenebiliyoruz. Ayrıca GROUP BY rating.icerik_id ile kaç adet oylama yapıldığını da bu sorguda öğreniyoruz, rating;

SELECT 
distinct 
y.icerik_id,
y.icerik_id  id,
 y.icerik_resim,
  y.icerik_tur,
   y.icerik_konu,
    y.icerik_tarih,
     u.icerik_id,
     u.begeni,
     u.hit,
     oyla.icerik_id ,
     oyla.oy,
     oyla.ortalama
FROM icerik y 
LEFT JOIN okumalar u ON u.icerik_id = y.icerik_id 

LEFT JOIN (select 
rating.icerik_id , 
count(rating.icerik_id ) as oy,
ROUND(AVG(rating.rating_kullanici),1) as ortalama  
from rating rating 
right JOIN tasarim_icerik y2 ON rating.icerik_id = y2.icerik_id 
group by rating.icerik_id ) oyla on y.icerik_id=oyla.icerik_id ORDER BY DESC

 

 Dördüncü LEFT JOIN tablo sargusu yorumlar üzerine çekeceğimiz bir sorgu, icerik_id ile eşleşen yorumların toplam sayısını COUNT ile öğreniyoruz, yorumlar;

SELECT 
distinct 
y.icerik_id,
y.icerik_id  id,
 y.icerik_resim,
  y.icerik_tur,
   y.icerik_konu,
    y.icerik_tarih,
     u.icerik_id,
     u.begeni,
     u.hit,
     oyla.icerik_id ,
     oyla.oy,
     oyla.ortalama,
     yos.icerik_id,
     yos.yorumla
FROM icerik y 
LEFT JOIN okumalar u ON u.icerik_id = y.icerik_id 

LEFT JOIN (select 
rating.icerik_id , 
count(rating.icerik_id ) as oy,
ROUND(AVG(rating.rating_kullanici),1) as ortalama  
from rating rating 
right JOIN tasarim_icerik y2 ON rating.icerik_id = y2.icerik_id 
group by rating.icerik_id ) oyla on y.icerik_id=oyla.icerik_id 

LEFT JOIN (select yo.icerik_id, count(yo.icerik_id) as yorumla 
from yorumlar yo 
right JOIN tasarim_icerik y2 ON yo.icerik_id = y2.icerik_id 
group by yo.icerik_id) yos on y.icerik_id=yos.icerik_id 

ORDER BY id DESC

 

 Bütün tabloların echo ile yazırmak istersek LEFT JOIN ile sonradan  değişkene aktardığımız sütunlar da dahil verileri şu şekilde yazdırabiliriz;

    $db_user     = "root";
    $db_pass     = "";
    $db_name     = "veritabani";
    $host_name     = "localhost";


    try {
        $db      = new PDO("mysql:host=$host_name;dbname=$db_name", $db_user, $db_pass);
    } catch (PDOException $e) {
        echo 'Connection failed: '.$e->getMessage();
    }

    $db->query("SET NAMES utf8");
    $db->query("SET CHARACTER SET utf8");
    $db->query("SET COLLATION_CONNECTION = 'utf8_general_ci'");

 

$icerik=$db->prepare($sql);
$icerik->execute();
 $icerikal=$icerik->fetchAll(PDO::FETCH_ASSOC); 
                  foreach ($icerikal as $icerikgetir) {
echo $icerikgetir["id"]; //10
echo $icerikgetir["icerik_resim"]; //icerik12.jpg
echo $icerikgetir["icerik_tur"]; //blog
echo $icerikgetir["icerik_konu"]; //örnek İçerik
echo $icerikgetir["icerik_tarih"]; //17.2.2019
echo $icerikgetir["begeni"]; //10
echo $icerikgetir["hit"]; //250
echo $icerikgetir["oy"]; //2
echo $icerikgetir["ortalama"]; //3
echo $icerikgetir["yorumla"]; //2
}

 

Bu yazı hakkında ki görüşlerinizi yorum yaparak iletebilirsiniz. Beğenmeyi unutmayın.