2016-02-25 90 views
1

我希望得到N个新闻与偏移Ø与所有标签MySQL查询为多对多与限制

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个查询。我怎样才能做得更好?

回答

0

试着这么做:

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条款将从news表中选择一个任意的记录集。

+0

非常感谢。没有15的声望给你评分。 –