使用以下查询找到对象的所有标记并获取每个标记的计数没有问题。
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)是否对每个标签的计数做出了贡献。
然后,我将显示该书所具有的所有标签,但将该用户添加的标签设置为不同的样式。我可以做这个循环和多个查询,它看起来应该是可以在一个。
答案 0 :(得分:1)
SELECT *, COUNT(*), SUM(user_id = 1) AS contributed
etc...
MySQL会将user_id = 1
比较的布尔值true / false转换为整数1
或0
,这会得到总结。当您检索查询结果时,如果它不为零,则该特定用户已贡献,该值为贡献总数。
答案 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