Php 获取所有新闻和评论
我试图编写一个查询代码,获取所有新闻和每个新闻的所有评论。 我目前的查询是:Php 获取所有新闻和评论,php,sql,mysql,Php,Sql,Mysql,我试图编写一个查询代码,获取所有新闻和每个新闻的所有评论。 我目前的查询是: 选择n.*, c、 *作为评论 来自新闻 加入c上的评论(c.news\u id=n.id) 但是当我以数组的形式获取查询时,它会按注释给我一个key,我希望在子数组中有一个key by news和所有注释 比如: Array ( [0] => Array ( [id] => 1 // news' id ... // rest of news'
选择n.*,
c、 *作为评论
来自新闻
加入c上的评论(c.news\u id=n.id)
但是当我以数组的形式获取查询时,它会按注释给我一个key,我希望在子数组中有一个key by news和所有注释
比如:
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直接完成。(因为您也没有直接从数据库返回PHP) 你在用什么ORM吗?你可能想考虑一下:
- ,PHP5.1 plus的开源ORM,自由软件(GNU LGPL)
- ,PHP5.2.3开源ORM,自由软件(GNU LGPL)
- ,适用于PHP5的ORM和查询工具包,灵感来自Apache Torque,免费软件(GNU LGPL)
- ,PHP5.0.4或更新版本的开源ORM,免费软件(BSD)
- ,数据库类创建者和查询生成器,灵感来源于Prope,但更易于安装的免费软件
- 数据映射器实现(新BSD)
- PHP5.1.6或更新版本的开放源码ORM(beta版),使用类似于Hibernate(新BSD)的方法
- PHP5的开放源码ORM,使用代码生成(应该可以连接其他数据库驱动程序,但开箱即用仅包括MySQL支持。)(FreeBSD)
我假设它返回的是单个记录,而不是数据结构。您需要自己将这些记录分组到数据结构中。如果可能的话,我会提供一些示例代码,但这不能通过SQL直接完成。(因为您也没有直接从数据库返回PHP) 你在用什么ORM吗?你可能想考虑一下:
- ,PHP5.1 plus的开源ORM,自由软件(GNU LGPL)
- ,PHP5.2.3开源ORM,自由软件(GNU LGPL)
- ,适用于PHP5的ORM和查询工具包,灵感来自Apache Torque,免费软件(GNU LGPL)
- ,PHP5.0.4或更新版本的开源ORM,免费软件(BSD)
- ,数据库类创建者和查询生成器,灵感来源于Prope,但更易于安装的免费软件
- 数据映射器实现(新BSD)
- PHP5.1.6或更新版本的开放源码ORM(beta版),使用类似于Hibernate(新BSD)的方法
- PHP5的开放源码ORM,使用代码生成(应该可以连接其他数据库驱动程序,但开箱即用仅包括MySQL支持。)(FreeBSD)
您不能在一个查询中完成这项工作-最好是接受您得到的查询并对结果进行后期处理,以获得所需的数据结构 更详细地说,任何SQL查询只能返回二维数据数组——一个维度用于列,一个维度用于匹配行。在你的例子中,你真正想要的更像是一张三维的桌子 还要注意,在您编写的查询中,对于每篇文章的每一条评论,都会一次又一次地返回所有的
新闻数据。这是对带宽和数据库服务器资源的低效利用
这样做可能更有效(在伪代码中):
第一个查询获取所有新闻文章并将它们放入一个数组中。第二个查询获取评论,并在每个新闻文章的结构中累积一个单独的数组。在一个查询中无法做到这一点-最好接受您得到的查询并对结果进行后期处理,以获得所需的数据结构
更详细地说,任何SQL查询只能返回二维数据数组——一个维度用于列,一个维度用于匹配行。在你的例子中,你真正想要的更像是一张三维的桌子
还要注意,在您编写的查询中,对于每篇文章的每一条评论,都会一次又一次地返回所有的新闻数据。这是对带宽和数据库服务器资源的低效利用
这样做可能更有效(在伪代码中):
第一个查询获取所有新闻文章并将它们放入一个数组中。第二个查询获取评论,并在每个新闻文章的结构中累积一个单独的数组。您可以使用内部联接在单个查询中获取结果
假设您的数据库结构如下:
tab_news:news_id,news
选项卡cmt:cmt id、新闻id、cmt
现在编写如下查询:
从tab_news n internal join tab_cmt c on(c.news\u id=n.news\u id)中选择n.news,c.cmt您可以使用内部连接在单个查询中获取结果
假设您的数据库结构如下:
tab_news:news_id,news
选项卡cmt:cmt id、新闻id、cmt
现在编写如下查询:
从选项卡\u news n internal join选项卡\u cmt c on(c.news\u id=n.news\u id)中选择n.news,c.cmt
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;
}