我有一个包含各种表的MySQL数据库,其记录可以被标记,因此我有一个tags
表和一个tag_associations
表,它通过多个外键将标记与其他“可标记”表相关联,还有一个“拥有”的用户 - 我的字段类似于以下内容:
我基本上想要计算所有标记了特定标记的项目 - 所以这个查询的结果是这样的:
SELECT
COUNT(ta.tag_association_id) AS how_many
FROM
tag_associations AS ta
LEFT JOIN users AS u ON ta.user_id = u.user_id
WHERE
ta.tag_id = '480'
AND u.user_status = 'active'
但是这个查询的问题在于多个用户将相同的标签应用于同一个项目的情况,因此如果2个不同的用户将艺术家的'Bobby Jones Band'标记为'rad',则它同时计算标记关联,我只想计算一次。我尝试将其添加到上面:
GROUP BY ta.artist_id, ta.album_id, ta.track_id
...让我接近,但没有得到我需要的确切结果 - 它给了我不同计数的多行结果。在这种情况下我是否可以使用任何魔法并将其保存在单个查询中?虽然保持尽可能高效,当然:)谢谢!
答案 0 :(得分:1)
如果我的问题是正确的,那么GROUP BY
几乎应该完成这项工作。
此解决方案应获取tag_associations
中的唯一行并计算它们。
SELECT COUNT(*)
FROM
(
SELECT 1
FROM tag_associations AS ta
LEFT JOIN users AS u ON ta.user_id = u.user_id
WHERE ta.tag_id = '480'
AND u.user_status = 'active'
GROUP BY ta.artist_id, ta.album_id, ta.track_id
) x