我有一个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
这很有效,但似乎不是最有效的方式。
非常感谢任何帮助!
答案 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;