Я создаю сайт, на котором пользователи могут оценивать предметы (скажем, книги) от 1 до 5 звезд. Я создал базу данных MySQL и таблицу, в которой хранится информация о каждом рейтинге (itemid, userid, ratingValue).MySQL: AVG, когда нет соответствующих строк
Каждый элемент имеет специальную веб-страницу, и я хотел бы рассказать об этой странице о: (1) количестве оценок и (2) среднем рейтинге. Я думал, что это лучше всего сделать с точки зрения. Размышляя о запросах MySQL использовать в представлении, я пришел:
SELECT ItemID, COUNT(ratingValue), IFNULL(AVG(ratingValue),0) FROM reviews GROUP BY ItemID
Проблема: если элемент еще не оценили, он не будет отображаться на запросе. Мне бы хотелось, чтобы все элементы отображались в результате запроса (view), и если есть элемент без отзывов, он должен появиться с информацией, что есть 0 отзывов и что средний рейтинг - это какое-то произвольное значение, скажем, 0.
AVG() возвращает NULL, если не было подходящих строк
и по этой причине я пытался использовать функцию IFNULL(). Однако это не работает. Например, в базе данных с пунктами 1,2,3,4,5, где пункт 5 не имеет отзывов, я получаю:
ItemID COUNT(Rating) IFNULL(AVG(ratingValue),0) 1 4 4.0000 2 2 4.0000 3 2 3.5000 4 3 5.0000
Любые идеи о том, как преодолеть эту проблему?
Это сработало! Я никогда не думал использовать LEFT JOIN, но это действительно хорошее решение. –