当前位置: 首页 > 面试题库 >

获取所有新闻和所有评论

许典
2023-03-14
问题内容

我正在尝试编写一个查询,以获取每个新闻的所有新闻和所有评论。我当前的查询是:

SELECT n.*,
       c.* AS comments
  FROM news n
       JOIN comments c ON (c.news_id = n.id)

但是,当我以数组的形式获取查询时,它通过注释为我提供了一个键,而我希望通过新闻和一个子数组中的所有注释来获得一个键。

就像是:

Array
(
    [0] => Array
    (
        [id] => 1 // news' id
        ...       // rest of news' data
        [comments] = Array
        (
            [id] => 1 // comment's id
            ...       // rest of comments' data
        )
    ),
    ... // all other news
)

谢谢!


问题答案:

您无法在一个查询中做到这一点-最好采用您已得到的查询并对所得到的答案进行后处理以获得所需的数据结构。

为了进一步详细说明-任何SQL查询只能返回二维数据数组-一维用于列,一维用于匹配的行。在您的情况下,您实际上想要的是一个三维表。

还要注意,在您写的查询中,news针对每篇文章的每个注释将一遍又一遍地返回所有数据。这是对数据库服务器带宽和资源的低效率使用。

这样做(用伪代码)可能更有效:

SELECT * FROM news
...
foreach ($rows as $row) {
  $row['comments] = array();
  $news[$row['id']] = $row;
}

SELECT * FROM comments
...
foreach ($rows as $row) {
  $news[$row['news_id']]['comments'][] = $row;
}

第一个查询获取所有新闻文章,并将它们放入数组中。第二个查询获取评论,并在每个新闻文章的结构内累积一个单独的数组。



 类似资料:
  • 问题内容: 我想使用JSoup从文档中选择所有注释。我想做这样的事情: 我已经试过了: } 但是在日食“不兼容的条件操作数类型元素和注释”中发生以下错误。 干杯, 问题答案: 由于您需要应用到节点对象,而不是元素,因此:

  • 问题内容: 在带有Python的Selenium中,是否可以将WebElement的所有子级作为列表获取? 问题答案: 是的,您可以通过或实现。 但是,这听起来并不像查找某个元素的 所有子 元素的有效用例。要获得所有直接/间接孩子都是昂贵的手术。请进一步说明您要做什么。应该有更好的方法。

  • 问题内容: 使用来获取Cookie 似乎很简单,它似乎将Cookie存储在其他位置。 我做了一些研究,然后从对象中获取了一些Cookie 。但是,其中不包含: 奇怪的是,ios 9中还有一个类负责管理中的cookie ,但是,该类不包含用于检索cookie数据的公共方法: 是否有解决方法来获取Cookie数据? 问题答案: 最后,对于登陆iOS的11。 https://developer.appl

  • 问题内容: 有没有一种方法可以通过sql语句或vba代码从访问文件中返回所有表?“我不知道桌子的名字” 例如,当您希望表中包含所有字段时,无论字段名称如何,都使用“ *”。 但是如何获得所有表? 问题答案: 这将带回MS Access数据库中的所有表(包括链接表) 它还包含Sys表,因此您可能要排除以 MSys 开头的表 __ 看一下 使用MSysObjects 选择“表” AS [表],MSys

  • 在Selenium和Python中,是否可以将WebElement的所有子元素作为列表?

  • 我正在寻找一种方法,以获得所有的DNS记录的网址<有没有一种方法可以在没有任何库的情况下使用C#实现这一点?