mysql - 统计多外键表的记录(MySQL)

标签 mysql

我有一个 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

...这让我很接近,但没有产生我需要的确切结果——它给了我不同计数的多行结果。在这种情况下,我可以使用任何魔法并将其保存在单个查询中吗?当然,在保持尽可能高效的同时 :) 谢谢!

最佳答案

如果我答对了你的问题,那么你的 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

关于mysql - 统计多外键表的记录(MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2008941/

相关文章:

php - undefined offset : 1 using mysql_real_escape_string($data[0])

php - 如何使用 php 将 post 数据插入 mysql 数据库?

php - Magento 网站因移动而无法正常工作

php - Drupal 站点不正常 - 消除过程

Mysql 将我的日期列保存为 0000-00-00?

php - 组合两个不同的 select 和 update 语句

php - SQL bindParam 不工作

mysql 主键以模式开头

java - 如何使用jdbc在mysql中动态传递表名?

mysql - 插入到……重复 key 更新……。有条件?