加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 一个SQL查询,或循环中的许多查询?

发布时间:2020-12-13 21:59:38 所属栏目:PHP教程 来源:网络整理
导读:我需要从表中提取几行并以两种方式处理它们: 聚合在一个键上 逐行,按相同的键排序 该表看起来大致如下: table ( key,string_data,numeric_data) 所以我正在研究我正在写的函数的两种方法. 第一个是使用一个查询提取聚合数据,然后在循环内再次查询每组逐行
我需要从表中提取几行并以两种方式处理它们:

>聚合在一个键上
>逐行,按相同的键排序

该表看起来大致如下:

table (
   key,string_data,numeric_data
)

所以我正在研究我正在写的函数的两种方法.

第一个是使用一个查询提取聚合数据,然后在循环内再次查询每组逐行数据(以下是类似PHP的伪代码):

$rows = query(
        "SELECT key,SUM(numeric_data)
         FROM table
         GROUP BY key"
    );

foreach ($rows as $row) {
    <process aggregate data in $row>

    $key = $row['key'];
    $row_by_row_data = handle_individual_rows($key);
}

function handle_individual_rows($key)
{
    $rows = query(
            "SELECT string_data
             FROM table WHERE key=?",$key
        );

    <process $rows one row at a time>

    return $processed_data;
}

或者,我可以做一个大的查询,并让代码完成所有工作:

$rows = query(
    "SELECT key,numeric_data
     FROM table"
);

foreach ($rows as $row) {
    <process rows individually and calculate aggregates as I go>
}

在该应用中,性能不是实际问题;我只是想编写合理且可维护的代码.

我喜欢第一个选项,因为它更模块化 – 我喜欢第二个选项,因为它看起来结构简单.一种选择比另一种更好还是真的只是风格问题?

解决方法

一个SQL查询,当然.

这将

>为您节省大量往返数据库
>允许使用更有效的GROUP BY方法

由于数据库可以很好地执行聚合,因此对于可维护性也更好:您将所有结果集逻辑放在一个位置.

以下是返回每一行并计算SUM的查询示例:

SELECT  string_data,numeric_data,SUM(numeric_data) OVER (PARTITION BY key)
FROM    table

请注意,这很可能会使用并行访问来计算不同键的SUM,这在PHP中很难实现.

MySQL中的相同查询:

SELECT  key,(
        SELECT  SUM(numeric_data)
        FROM    table ti
        WHERE   ti.key = to.key
        ) AS key_sum
FROM    table to

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读