首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询PHP -Blog

查询PHP -Blog
EN

Stack Overflow用户
提问于 2015-11-13 11:13:06
回答 2查看 88关注 0票数 1

我确信在网络的某个地方,这个问题已经被问到了,但是我没有找到,因为我不知道我到底应该搜索什么。因此,我将尝试描述这个问题:

我有一个用PHP写的博客和一个SQL-数据库,我在那里接收所需的数据。

每个博客条目包含一个图片和一个文本字段,并有自己的id。为了获得这些数据,我执行了这个查询(伪代码) ->,它运行得很好:

代码语言:javascript
复制
foreach($db->query("SELECT news.id, news.position, news_text.date, news_text.text, news_images.image
                    FROM news 
                    LEFT OUTER JOIN news_text ON news.id=news_text.id
                    LEFT OUTER JOIN news_images ON news_images.id = news.id 
                    ORDER BY position") as $row){
                                                echo "{$row['id']}";
                                                echo "{$row['position']}";
                                                echo "{$row['date']}";
                                                echo "{$row['text']}";
                                                echo "{$row['image']}"; 
                                                }

现在问题开始了。我想添加一个注释字段,用户可以在其中添加一条消息。因此,对于每个博客条目,可以有几个评论(可能是1:n连接)。-我试图在foreach循环中添加一个foreach循环(愚蠢)--我尝试了几个SQL-查询,但结果只得到了垃圾结果--我看不出如何将数据库news_comment与其他数据库连接起来的逻辑。

以下是我的简化数据库:

谁能给我个提示我怎么解决这个问题。其结果应是:

代码语言:javascript
复制
foreach($db->query("SELECT news.id, news.position, news_text.date, news_text.text, news_images.image
                    FROM news 
                    LEFT OUTER JOIN news_text ON news.id=news_text.id
                    LEFT OUTER JOIN news_images ON news_images.id = news.id 
                    ORDER BY position") as $row){
                                                echo "{$row['id']}";
                                                echo "{$row['position']}";
                                                echo "{$row['date']}";
                                                echo "{$row['text']}";
                                                echo "{$row['image']}"; 
           Here i get for each blog-entry the corresponding comments..            
                                                }

谢谢。米什

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-13 11:29:02

您应该使用与检索新闻相同的条件在另一个查询(而不是循环中)中检索注释。因此,在执行这两个查询之后,您将不得不执行数组: news和comments。

然后,你只需要对每一个新闻项目采取适当的评论。

为此,您可能需要重新构建注释数组,以便将注释news_id作为存储注释的数组的索引。

最后看起来是这样的:

代码语言:javascript
复制
$news = [
    [
        'id' => ...,
        'position' => ...
        <so on>
    ]
];

$comments = [
    $news[0]['id'] = [<comment array>],
    <so on>
];

这是大多数框架使用的在结果集中绑定数据的方式。

票数 1
EN

Stack Overflow用户

发布于 2015-12-15 16:06:26

在亚历克斯(Thx)和MulipleIterator的帮助下解决了这个问题。这就是我的工作方式(也许有人有更好的解决方案)。

代码语言:javascript
复制
foreach($db->query("SELECT news.id, news.position, news_text.date, news_text.text, news_images.image
FROM news 
LEFT OUTER JOIN news_text ON news.id=news_text.id
LEFT OUTER JOIN news_images ON news_images.id = news.id 
ORDER BY position") as $row)
  {
  $news_id[] = $row['id'];
  $news_text[] = $row['news_text'];
  $news_images[] = $row['news_images'];
  $values = new MultipleIterator();
  $values->attachIterator(new ArrayIterator($news_id));
  $values->attachIterator(new ArrayIterator($news_text));
  $values->attachIterator(new ArrayIterator($news_images));
  } 

foreach($values as $value) 
  {
  list($news_text, $news_images, $news_id) = $value; 
    {
    echo '$news_text';
    echo '$news_images';

    foreach($db->query("SELECT comment FROM news_comment WHERE id = $news_id ") as $row)
      {
      echo "{$row['comment']}";
      }
    }
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33691447

复制
相关文章

相似问题

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