0
我正在尝试显示已用特定标记标记的食谱列表。这是行得通的,除了我不能显示标签已被不同用户应用于每本书的次数。我想按这个数字排序,例如,多个用户标记为“烘焙”的书会比只有一个用户标记为“烘焙”的书高。MySQL JOIN查询问题/ COUNTs
下面是表的略微简化的列表:
表1:食谱
ID, Title, Author, etc.
表2:配方
ID, recipe_title, recipe, cookbook_id
表3:recipe_reviews
ID, recipe_id, star_rating, comments
TABL E 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
UPDATE:该查询结束了工作,当我调试它,意识到在第二次计数中需要DISTINCT,并且它试图计算错误的变量;应该是user_id。
很好的建议!我把它分解成基本知识,并意识到我在对错误变量进行COUNT处理。 – mandel 2010-11-04 21:01:55
非常好,我很乐意帮忙! – Infotekka 2010-11-04 21:11:49