Mysqlde 4 Tabloyu Left Join İle Birleştirme
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) {
}
Bu yazı hakkında ki görüşlerinizi yorum yaparak iletebilirsiniz. Beğenmeyi unutmayın.