mysql - 获取标签的数量和当前用户对该计数的贡献

时间:2012-03-24 16:03:25

标签: mysql

使用以下查询找到对象的所有标记并获取每个标记的计数没有问题。

SELECT *, COUNT(*) as count 
  FROM book_tags 
  JOIN tags ON book_tags.tag_id = tags.id 
  WHERE book_id = 66 GROUP BY tag_id

这样可行,但user_id列被GROUP BY捣碎。我仍然想要本书中每个标签的标签总数,但我还想创建一个别名,告诉我当前用户(user_id = 1)是否对每个标签的计数做出了贡献。

然后,我将显示该书所具有的所有标签,但将该用户添加的标签设置为不同的样式。我可以做这个循环和多个查询,它看起来应该是可以在一个。

2 个答案:

答案 0 :(得分:1)

SELECT *, COUNT(*), SUM(user_id = 1) AS contributed
etc...

MySQL会将user_id = 1比较的布尔值true / false转换为整数10,这会得到总结。当您检索查询结果时,如果它不为零,则该特定用户已贡献,该值为贡献总数。

答案 1 :(得分:0)

你可以这样做的一种方式:

SELECT *, COUNT(*) as count,
  sum(if(user_id = 1, 1, 0)) as user_contributions
  FROM book_tags 
  JOIN tags ON book_tags.tag_id = tags.id 
  WHERE book_id = 66 GROUP BY tag_id