MySQL 查询有限制的多对多

MySQL query for many to many with limit

我想获取所有标签偏移量为 O 的 N 个新闻

news
id | title

tag
id | name

news_tag
news_id | tag_id

如何在单个查询中完成?

现在第N条新闻

  SELECT * FROM news LIMIT N, O

获取每条新闻的所有标签后:

SELECT n.id, nt.tag_id, t.name FROM news AS n 
JOIN news_tag AS nt ON n.id = nt.news_id
JOIN tag AS t ON nt.tag_id = c.id
WHERE n.id = curNewsId

是N+1查询。我怎样才能做得更好?

试试这样的东西:

SELECT n.id, nt.tag_id, t.name 
FROM (SELECT id 
      FROM news 
      LIMIT N, O) AS n 
JOIN news_tag AS nt ON n.id = nt.news_id
JOIN tag AS t ON nt.tag_id = c.id

需要注意的是 LIMIT 在没有 ORDER BY 子句的情况下应用将 select 来自 news 任意 记录集] table.