MySQL JOIN查询/ COUNTs的问题

时间:2010-11-04 17:40:47

标签: mysql join

我正在尝试显示已使用特定标签标记的烹饪书列表。这是有效的,但我不能显示不同用户将标签应用于每本书的次数。我希望按这个数字排序,以便多个用户标记为“烘焙”的书的排名高于仅由一个用户标记为“烘焙”的书。

以下是一个略微简化的表格列表:

表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。

1 个答案:

答案 0 :(得分:1)

要调试它,请尝试一个简单的SELECT *并删除GROUP BY子句和COUNT个字段,这样您就可以看到在分组之前生成的原始数据,您可能会发现您的连接不能按预期工作