在列表中显示每个帖子的标签,而不使用太多查询

时间:2014-01-22 18:13:47

标签: php mysql tags

我有一个MySql数据库帖子,其中填写了列表中browse.php上显示的帖子,每页限制十个。

我有两个单独的标记数据库表,tags(id,tag)和tagRel(tagId,postId),其中包含标记,我试图找出更好的方法在browse.php中显示每个帖子的标签,而不是每次运行单独的查询来获取每个帖子的标签。

所以现在我有类似的东西

SELECT * FROM posts LIMIT 10

然后在结果循环中

SELECT * FROM tags 
INNER JOIN tagRel ON tagRel.tagId = tags.id 
INNER JOIN posts ON posts.id = tagRel.postId 
WHERE posts.id = :currentId

这很有效,但似乎不是最有效的方式。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

对于要显示10个帖子的每个页面,然后执行以下查询以获取所有10个帖子的标签,而不是执行10个查询。为了获得更好的性能,您可以避免加入posts

SELECT * FROM tags INNER JOIN tagRel ON tagRel.tagId = tags.id WHERE tagRel.postId in (postId1, postId2, ...)

答案 1 :(得分:0)

试试这个:

SELECT p.*, t.* FROM posts as p, tags as t, tagRel as tr WHERE p.id = tr.postId and tr.tagId=t.id limit 10

希望有所帮助

答案 2 :(得分:0)

试试这个:

SELECT B. *,(来自tag_id = B.id的标签的SELECT group_concat(tags))作为标签来自帖子AS B;