Burti adlı üyeden alıntı: mesajı görüntüle
Laradan titana çevirdim başka bi sebepten dolayı;

$comments = Model::run('Comments')->type('series')->db()
            ->select("comments.*,users.*,series.*,sum(case when comments_like.like_type = '0' then 1 else 0 end) as dislike,sum(case when comments_like.like_type = '1' then 1 else 0 end) as likes")
            ->innerJoin('users', 'comments.user_id=users.user_id')
            ->innerJoin('series', 'comments.post_id=series.series_id')
            ->leftJoin('comments_like', 'comments.id=comments_like.comment_id')
            ->groupBy('comments.id')
            ->orderBy('comments.id', 'DESC')
            ->getAll();
SELECT comments.*,users.*,series.*,sum(case when comments_like.like_type = '0' then 1 else 0 end) as dislike,sum(case when comments_like.like_type = '1' then 1 else 0 end) as likes FROM comments  INNER JOIN users ON comments.user_id=users.user_id INNER JOIN series ON comments.post_id=series.series_id LEFT JOIN comments_like ON comments.id=comments_like.comment_id WHERE comments.type='series'  GROUP BY comments.id   ORDER BY comments.id DESC
Yok hocam baz alamadık. Baz olarak comments_like alanını alıyor. kafayı kırdım iyice


@CoreDeluxe; seninkide baz olarak likes ı alıyor;

SELECT comments.*,users.*,series.*,(SELECT COUNT(*) as dislike FROM comments_like WHERE comments_like.comment_id=comments.id AND comments_like.like_type = 0) as aa,
(SELECT COUNT(*) as dislike FROM comments_like WHERE comments_like.comment_id=comments.id AND comments_like.like_type = 1) as bb FROM comments  INNER JOIN users ON comments.user_id=users.user_id INNER JOIN series ON comments.post_id=series.series_id LEFT JOIN comments_like ON comments.id=comments_like.comment_id WHERE comments.type='series'  GROUP BY comments.id   ORDER BY comments.id DESC
ben arkadaşın iki yaklışımı analiz etmeden birisi için olmaz/iyi olmaz gibisinden yorum yaptığı için analiz edelim öyle karar verelim diye cevap yazdım.

siz subquery denediğiniz için sorgunuzu tam olarak analiz etme şansım yok ama veri tipine bakarak bariz gözüken hatayı söyleyebilirim.

enum('0','1') veritipi için ayrıntıya girmeden

'0' karşılığı 1
'1' karşılığı 2 dir (tırnak içinde yazdığım metin, direk 1,2 yazdıklarım integer)

SELECT COUNT(*) as dislike FROM comments_like WHERE comments_like.comment_id=comments.id AND comments_like.like_type = 0

comments_like.like_type = 0 bunun karşılığı yoktur, bu sorgu her zaman 0 sonucunu üretir.

istemsizce kritik bir duruma el atmışsınız.

SELECT COUNT(*) as dislike FROM comments_like WHERE comments_like.comment_id=comments.id AND comments_like.like_type = 1

burada (like_type = 1) beğeni sonucu bekliyorsunuz ama 1 ifadesinin karşığı like_type = '0' beğenmeme durumudur.



SELECT comments.*,users.*,series.*,(SELECT COUNT(*) as dislike FROM comments_like WHERE comments_like.comment_id=comments.id AND comments_like.like_type = '0') as aa,
(SELECT COUNT(*) as dislike FROM comments_like WHERE comments_like.comment_id=comments.id AND comments_like.like_type = '1') as bb FROM comments INNER JOIN users ON comments.user_id=users.user_id INNER JOIN series ON comments.post_id=series.series_id LEFT JOIN comments_like ON comments.id=comments_like.comment_id WHERE comments.type='series' GROUP BY comments.id ORDER BY comments.id DESC


ile

SELECT comments.*,users.*,series.*,(SELECT COUNT(*) as dislike FROM comments_like WHERE comments_like.comment_id=comments.id AND comments_like.like_type = 1) as aa,
(SELECT COUNT(*) as dislike FROM comments_like WHERE comments_like.comment_id=comments.id AND comments_like.like_type = 2) as bb FROM comments INNER JOIN users ON comments.user_id=users.user_id INNER JOIN series ON comments.post_id=series.series_id LEFT JOIN comments_like ON comments.id=comments_like.comment_id WHERE comments.type='series' GROUP BY comments.id ORDER BY comments.id DESC


sorguları aynıdır

iyi çalışmalar

----------

arkadaşın yazdığı sorgu için de bişeyler yazıcaktım es geçmişim ekliyorum.

SELECT comments.*,users.*,series.*,sum(case when comments_like.like_type = '0' then 1 else 0 end) as dislike,sum(case when comments_like.like_type = '1' then 1 else 0 end) as likes FROM comments INNER JOIN users ON comments.user_id=users.user_id INNER JOIN series ON comments.post_id=series.series_id LEFT JOIN comments_like ON comments.id=comments_like.comment_id WHERE comments.type='series' GROUP BY comments.id ORDER BY comments.id DESC

sorgu hatasız gözüküyor fakat olabilecek durumu belirtiyim.

LEFT JOIN ifadesi var yani NULL değer gelebilir.

comments_like.like_type = '0'
NULL = '0' diye bir yaklaşım doğru değildir. bu durumlarda = operatörü kullanılmaz. <=> operatörü kullanılır.

sum(case when comments_like.like_type <=> '0' then 1 else 0 end) as dislike,sum(case when comments_like.like_type <=> '1' then 1 else 0 end)

bir de yukarı bahsettiğim şekilde deneyin.

sum(case when comments_like.like_type+0 <=> 1 then 1 else 0 end) as dislike,sum(case when comments_like.like_type+0 <=> 2 then 1 else 0 end)

bilgi ve tecrübe ile ifadelere bakarak söyleyebileceklerim bu kadar. yine istediğiniz sonucu alamazsanız veritabanınız üzerinde sorgu analiz yapmanız/yaptırmanız gerekir.