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查询,当然.
这将 >为您节省大量往返数据库 由于数据库可以很好地执行聚合,因此对于可维护性也更好:您将所有结果集逻辑放在一个位置. 以下是返回每一行并计算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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |