MySQL 标签系统 - 如何 select 关联到最后 N 个发布的帖子的所有标签?
MySQL Tag System - How to select all the tags associated to the last N published posts?
我正在为我的网站实施标签系统,使用 PHP + MySQL。
在我的数据库中,我有以下三个表(所谓的“Toxi Solution”):
帖子
- 编号
- 日期时间
- ...
标签
- 编号
- 标签
- 鼻涕虫
标签地图
- 编号
- 标签
其中:
- Id = post 在帖子中的 ID
- 标签 = 标签中的标签 ID
每个 post 可能有(在 TagsMap 中)一个或多个关联的标签。
现在我需要 select 所有与最近发布的 20 个相关的标签 post。
我试过了
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 不是很有经验)。
你能给我一些建议吗?
您可以先筛选 table Posts
,然后加入其他 2 table:
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)
我正在为我的网站实施标签系统,使用 PHP + MySQL。
在我的数据库中,我有以下三个表(所谓的“Toxi Solution”):
帖子
- 编号
- 日期时间
- ...
标签
- 编号
- 标签
- 鼻涕虫
标签地图
- 编号
- 标签
其中:
- Id = post 在帖子中的 ID
- 标签 = 标签中的标签 ID
每个 post 可能有(在 TagsMap 中)一个或多个关联的标签。
现在我需要 select 所有与最近发布的 20 个相关的标签 post。
我试过了
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 不是很有经验)。
你能给我一些建议吗?
您可以先筛选 table Posts
,然后加入其他 2 table:
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)