Здравствуйте, вопрос по sql.
Есть 2 таблицы в базе данных. likes и servers.
Сделал запрос, который должен сортировать записи из servers по количеству поставленных им лайков из таблицы likes (каждая оценка как отдельная запись в таблице, а не как число).
Всё шикарно работает, кроме момента, когда у записи из servers нет ни одной оценки в соответствующей таблице с оценками, эта запись просто не выводится. Я не утверждаю, что следующий код должен и такую запись учитывать, просто я не знаю, как это реализовать, т.к. не силён в sql.
Вот запрос (за форматирование самого запроса не волнуйтесь, я использую ORM и он требует подобного синтаксиса):
select s.id, l.target, count(*) as marks from servers s inner join likes l on l.target = s.id group by s.id order by marks
Буду благодарен любой помощи.
Рекомендую попробовать вот так:
select s.id, count(l.id) as marks from servers s left join likes l on l.target = s.id group by s.id order by marks
Обратите внимание на несколько моментов:
left join - он возьмёт все записи из servers. group by s.id но в списке полей есть ещё l.target не под агрегатной функцией - так нельзя, l.target не нужен. count(*) в вашем случае (с inner join) нормально посчитает, но с left join посчитает и те записи из servers для которых не нашлось лайков, поэтому с left join нужно count(l.id) или count(l.target) если в likes нет поля id.Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости