PHP 逻辑 - 对于每个内部 While 循环复制 MySQL 查询中的项目

标签 php html mysql

我在理解这个场景时遇到了一些困难。我有 3 个表,典型的 tagposttag_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/

相关文章:

php - 相同的网络用户使用相同的 session

jquery - Materialise slider 在 asp.net mvc 中不起作用

mysql - MySQL 语句中非字符串文字的引号

php - 代码点火器学说

php - Sql 整理出 "viral"主题(阅读次数最多的新主题)

php - 结合两种资源 PHP

html - 保持 float left div 在同一行

javascript - jQuery Selector 对应的图片和li

sql - 需要一个查询将所有电子邮件从一个表移动到另一个使用公共(public)行值作为链接

javascript - 将参数从 angularJs 发送到 php symfony2 api