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



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

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

文章

  • Id
  • DateTime

标记

  • Id
  • 标记
  • 蛞蝓

TagsMap

  • Id
  • 标记

地点:

  • Id = post的Id
  • 标签=标签在标签
  • 中的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不是很有经验)。

你能给我一些建议吗?

可以先过滤表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 ...

try this

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)

相关内容

  • 没有找到相关文章

最新更新