У меня довольно длинный SQL-запрос, который я привел ниже. Как вы можете видеть, он заказывает AvgRating и NumReviews, оба из которых зависят от данных из таблицы отзывов. К сожалению, мне нужно видеть строки в моих результатах, даже если нет отзывов, в настоящее время, если к заказу нет отзывов, то эта строка просто не отображается в результатах. Вся помощь очень ценится.
SELECT travisor_tradesperson.name, travisor_tradesperson.id, travisor_catagory.catname,
travisor_company.cname, travisor_company.description, travisor_company.city, travisor_company.address, travisor_company.postcode, travisor_company.phone,
ROUND(AVG(travisor_review.rating)) as RoundAvgRating, AVG(travisor_review.rating) as AvgRating, COUNT(travisor_review.rating) as NumReviews
FROM 'travisor_tradesperson'
INNER JOIN travisor_company
ON travisor_tradesperson.company = travisor_company.id
INNER JOIN travisor_catagory
ON travisor_tradesperson.catagory = travisor_catagory.id
INNER JOIN travisor_review
ON travisor_review.tradesperson = travisor_tradesperson.id
WHERE travisor_catagory.catname = '$catagory'
AND travisor_company.city = '$city'
GROUP BY travisor_tradesperson.name, travisor_catagory.catname, travisor_company.cname,
travisor_company.description
ORDER BY AvgRating DESC, NumReviews DESC
Слева присоединитесь к travisor_review
вместо Inner Join. Внутреннее соединение будет находить только записи, которые присутствуют в обеих таблицах. Если у вас нет отзывов для этой записи tradesperson, она упадет из набора результатов.
Левое соединение возвращает NULL, если оно не может совпадать с предикатом соединения. В этом случае трейдер возвращается, но с NULL. Преобразуйте NULL в 0, если это необходимо, и это должно исправить ваш AVG.