我在理解这个场景时遇到了一些困难。我有 3 个表,典型的 tag
、post
、tag_post
映射表。
我有一个显示帖子的页面,基本上只是执行查询SELECT * from POST
,然后在这些结果的while语句中查询SELECT tag_id FROM tag_post WHERE post_id = ?
,其中 ?
是父 while 循环中的 post_id
。我还拥有该父循环内每个帖子的 HTML。
我从第二个查询中获取 tag_id
值,然后在 HTML 中创建一个额外的 foreach ($tagIds as $tag) {}
来获取 tag_name
标签表中的值。
我的问题是,每次循环运行时,都会包含最近迭代中的标签。所以我的第二篇文章包含第一篇文章中的所有标签,第三篇文章包含所有三篇文章中的标签,等等。我知道我的问题是我运行了 HTML 两次,但正如我所说,我不知道如何纠正这个问题。
我是否采取了太多步骤?它能比我现在做的更有效率吗?
如果需要,我可以发布代码。
最佳答案
您可以通过单个查询获取所有必需的数据:
"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
数组。因此,在每次迭代中,新标签总是添加到该列表中。
关于PHP 逻辑 - 对于每个内部 While 循环复制 MySQL 查询中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733851/