在这种情况下,我有点麻烦。我有3个表,典型的tag
,post
,tag_post
映射表。
我有一个显示帖子的页面,基本上只是查询SELECT * from POST
,然后在这些结果的while语句中我查询SELECT tag_id FROM tag_post WHERE post_id = ?
?
为post_id
来自父while循环。我也有这个父循环中每个帖子的HTML。
我从第二个查询中获取tag_id
值,然后在我的HTML中降低,创建一个额外的foreach ($tagIds as $tag) {}
以从标记表中获取tag_name
值。
我的问题是,每次循环运行时,都包含来自最近迭代的标记。所以我的第二篇文章包含了第一篇文章中的所有标记,第三篇文章包含了所有这三种标记。我知道我的问题是我运行了两次HTML,但正如我所说,我无法理解如何纠正这个。
我采取了太多步骤吗?能不能比我做得更有效率呢?
如果需要,我可以发布代码。
答案 0 :(得分:2)
您可以通过一个查询获得所有必需的数据:
"SELECT p.* FROM post p
INNER JOIN tag_post tp ON (tp.post_id = p.id)
INNER JOIN tag t ON (t.id = tp.tag_id)
WHERE p.post_id = ?"
我猜你当前正在某些数组中累积数据而你不会清空tags
数组。因此,在每次迭代中,新标签始终会添加到该列表中。