gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:02:38 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com