首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php+mysql:提取每篇文章的所有标签

php+mysql:提取每篇文章的所有标签
EN

Stack Overflow用户
提问于 2012-06-11 22:19:43
回答 2查看 86关注 0票数 0

我正在尝试显示最近的20篇文章,以及它们各自的标签(每篇文章大约有3-4个标签)。我有一个文章表和一个标签表,每篇文章都有3-4行带有文章id的标签。

我知道该怎么做:

代码语言:javascript
运行
复制
$result = $mysqli->query("SELECT * FROM items  LIMIT 0,24 ");
while ($row = $result->fetch_object()) {
       $result2 = $mysqli->query("SELECT tag FROM tags WHERE item_id = ".$row->id);
               while ($row2 = $result2->fetch_object()) {
                      echo $row2 . '<br>';
                }
 }

当我尝试连接时,每篇文章都出现在3-4行中。

这看起来真的很不干净。有没有更优雅的方法来提取每篇文章的标签?我也乐于听到存储数据的不同方式,我刚刚开始这个项目……

EN

回答 2

Stack Overflow用户

发布于 2012-06-11 22:26:33

您可以尝试从项目限制0,24中选择不同的itemID

这将为每个itemID仅返回一个结果

票数 0
EN

Stack Overflow用户

发布于 2012-06-11 22:33:22

好的做法是连接两个表,但因为从理论上讲,一篇文章可以有很多标签,这会产生一些开销。

因此,在这种情况下,最好的做法是将第一个查询的结果存储在一个关联数组中,其中的关键字是项in:

代码语言:javascript
运行
复制
    $items = array();
    $result = $mysqli->query("SELECT * FROM items  LIMIT 0,24 ");
    while ($row = $result->fetch_object()) {
      $items[$row->item_id] = $row;
      $items[$row->item_id]->tags = array();
    }

在此迭代之后,执行第二个查询,但在所有项ID上使用选择器:

代码语言:javascript
运行
复制
    $result2 = $mysqli->query("SELECT item_id, tag FROM tags WHERE item_id IN (".implode(',', array_keys($items)).")");

    while ($row2 = $result2->fetch_object()) {
      $items[$row2->item_id]->tags[] = $row2->tag;
    }

这样,您只需2次查询即可填充完整的多维数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10981941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档