【发布时间】:2010-01-06 16:12:27
【问题描述】:
我有一个 MySQL 数据库,其中包含可以标记记录的各种表,因此我有一个 tags 表和一个 tag_associations 表,它通过多个外键将标签与其他“可标记”表相关联,也与“拥有”用户——我的字段如下所示:
- tag_association_id(主键)
- user_id(标签关联创建者)
- tag_id(相关标签)
- artist_id(标记的艺术家,可以为空)
- album_id(带标签的专辑,可以为空)
- track_id(标记的轨道,可以为空)
我基本上想计算所有被标记为特定标签的项目——所以沿着这个查询的结果:
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
...这让我很接近,但没有产生我需要的确切结果——它给了我不同计数的多行结果。在这种情况下我可以使用任何魔法并将其保存在一个查询中吗?当然,在保持尽可能高效的同时 :) 谢谢!
【问题讨论】:
标签: mysql