Есть таблица юзеров (не нуждается в описании) и таблица отзывов(feedbacks). У каждого отзыва есть лайки и дизлайки. Таблица лайков(feedbacks_likes) и дизлайков(feedbacks_dislikes) выполнены в отношении многие ко многим между таблицей users и таблицей feedback. Система аналогична оценке видео в youtube.
Запрос:
Нужно выбрать все фидбеки и отсортировать их по лайкам и дизлайкам.
Буду благодарен ответам в виде sql кода, laravel php кода или псевдокода.
select text, (select count(*) from feedbacks_likes where feedback_id = feedbacks.id) as likes, (select count(*) from feedbacks_dislikes where feedback_id = feedbacks.id) as dislikes from feedbacks
Легкий селект, только структура базы глупая.
В идеале хранить готовое число лайков и дислайков, чтобы не считать каждый раз.
select
f.text,
sum(case when t.feedback_type = 'like' then 1 else 0 end) likes,
sum(case when t.feedback_type = 'dislike' then 1 else 0 end) dislikes
from feedbacks f
join (
select
l.feedback_id,
'like' feedback_type
from feedbacks_likes l
union all
select
d.feedback_id,
'dislike' feedback_type
from feedbacks_dislikes d
) t on (f.id = t.feedback_id)
group by f.text;