MySQL 标签系统 - 如何选择与最近发布的 N 个帖子相关联的所有标签?

我正在为我的网站实施一个标签系统,使用 PHP + MySQL。

在我的数据库中,我有以下三个表(所谓的“Toxi Solution”):

帖子

  • 身份证
  • 日期时间
  • ...

标签

  • 身份证
  • 标签
  • 蛞蝓

标签映射

  • 身份证
  • 标签

哪里:

  • Id = 帖子中帖子的 ID
  • Tag = 标签中的标签 ID

每个帖子都可能(在 TagsMap 中)有一个或多个与之关联的标签。

现在我需要选择与最近发布的 20 个帖子相关联的所有标签。

我试过了

SELECT T.Slug,T.Tag
FROM Posts A,TagsMap TM,Tags T
WHERE (SELECT Id from Posts WHERE DateTime <= NOW() ORDER BY Id DESC LIMIT 20)
AND T.Id = TM.Tag
AND A.Id = TM.Id

但我明白

#1242 - Subquery returns more than 1 row

这就是我卡住的地方(我对 MySQL 的经验不是很丰富)。

你能给我什么建议吗?

zidaneii 回答:MySQL 标签系统 - 如何选择与最近发布的 N 个帖子相关联的所有标签?

您可以先过滤表Posts,然后加入其他2个表:

SELECT t.Slug,t.Tag
FROM Tags t
INNER JOIN TagsMap tm ON t.Id = tm.Tag 
INNER JOIN (
  SELECT Id 
  FROM Posts 
  WHERE DateTime <= NOW()
  ORDER BY DateTime DESC LIMIT 20
) p ON p.Id = tm.Id

如果您得到重复的结果,您可以使用 SELECT DISTINCT ...

,

试试这个

SELECT T.Slug,T.Tag
FROM Tags T
    left join TagsMap TM on TM.Tag = T.id
    left join Posts A on A.Id = TM.id
WHERE A.Id in (SELECT Id from Posts WHERE DateTime <= NOW() ORDER BY Id DESC LIMIT 20)
本文链接:https://www.f2er.com/1410.html

大家都在问