Я пытаюсь отобразить список поваренных книг, которые были помечены определенным тегом. Это работает, за исключением того, что я не могу также показать, сколько раз тег был применен к каждой книге разными пользователями. Я бы хотел отсортировать по этому номеру, чтобы книга с тегом «выпечка», например, несколькими пользователями, имела более высокий рейтинг, чем книга с тегом «выпечка» только одним пользователем.
Вот несколько упрощенный список таблиц:
Таблица 1: поваренные книги
ID, Title, Author, etc.
Таблица 2: рецепты
ID, recipe_title, recipe, cookbook_id
Таблица 3: recipe_reviews
ID, recipe_id, star_rating, comments
Таблица 4: book_tags
tag_id, tag_text
Таблица 5: book_user_tag
user_id, book_id, tag_id
Это тестовый запрос в том виде, в котором он написан на данный момент:
SELECT cookbooks.*, COUNT(DISTINCT recipe_reviews.ID) as numreviews, COUNT( book_user_tag.tag_id) as numtags, AVG(recipe_reviews.star_rating) as average, book_tags.tag_text
FROM cookbooks
LEFT OUTER JOIN recipes ON cookbooks.ID = recipes.cookbook_id
LEFT OUTER JOIN recipe_reviews ON recipes.ID = recipe_reviews.recipe_id
LEFT OUTER JOIN book_user_tag ON cookbooks.ID = book_user_tag.book_id
INNER JOIN book_tags ON book_user_tag.tag_id = book_tags.tag_id
WHERE book_user_tag.tag_id = 69
GROUP BY cookbooks.ID
ORDER BY numtags DESC
ОБНОВЛЕНИЕ: этот запрос закончил работать, когда я отладил его и понял, что DISTINCT требуется для второго счетчика, и что он пытается подсчитать неправильную переменную; должен был быть user_id.