我确信在网络的某个地方,这个问题已经被问到了,但是我没有找到,因为我不知道我到底应该搜索什么。因此,我将尝试描述这个问题:
我有一个用PHP写的博客和一个SQL-数据库,我在那里接收所需的数据。
每个博客条目包含一个图片和一个文本字段,并有自己的id。为了获得这些数据,我执行了这个查询(伪代码) ->,它运行得很好:
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与其他数据库连接起来的逻辑。
以下是我的简化数据库:

谁能给我个提示我怎么解决这个问题。其结果应是:
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..
}谢谢。米什
发布于 2015-11-13 11:29:02
您应该使用与检索新闻相同的条件在另一个查询(而不是循环中)中检索注释。因此,在执行这两个查询之后,您将不得不执行数组: news和comments。
然后,你只需要对每一个新闻项目采取适当的评论。
为此,您可能需要重新构建注释数组,以便将注释news_id作为存储注释的数组的索引。
最后看起来是这样的:
$news = [
[
'id' => ...,
'position' => ...
<so on>
]
];
$comments = [
$news[0]['id'] = [<comment array>],
<so on>
];这是大多数框架使用的在结果集中绑定数据的方式。
发布于 2015-12-15 16:06:26
在亚历克斯(Thx)和MulipleIterator的帮助下解决了这个问题。这就是我的工作方式(也许有人有更好的解决方案)。
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']}";
}
}
}https://stackoverflow.com/questions/33691447
复制相似问题