$arr = [];
$go= $dbh -> query("select id,gid from table1");while($rs = $go -> fetch(PDO :: FETCH_ASSOC)){$arr['table1'] = $rs;}
$go= $dbh -> query("select id,gid from table2");while($rs = $go -> fetch(PDO :: FETCH_ASSOC)){$arr['table2'] = $rs;}
$go= $dbh -> query("select id,gid from table3");while($rs = $go -> fetch(PDO :: FETCH_ASSOC)){$arr['table3'] = $rs;}
$go= $dbh -> query("select id,gid from table4");while($rs = $go -> fetch(PDO :: FETCH_ASSOC)){$arr['table4'] = $rs;}
....
如上,是否只能一个一个的查询再存储到数据中?是否每执行一个SQL语句就访问一次数据库?如何更有效率的处理查询语句结果到数组中?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
确实,按照您提供的代码示例,每个SQL查询都是独立执行的,这意味着针对每个table1
到table4
的查询,都会单独访问数据库一次。这种方式在处理大量数据或多个表时效率较低,因为它涉及到多次数据库交互。
为了提高效率,您可以考虑以下几种优化方法:
使用多表联查(JOIN):如果这些表之间有关联,并且您需要的数据可以通过关联字段合并,可以尝试使用JOIN操作在一个查询中获取所有数据。但请注意,这仅在逻辑上合适且不会导致数据量爆炸的情况下适用。
批量查询(UNION或 UNION ALL):如果各表结构相同或相似,且您只是简单地想聚合所有表中的数据,可以使用UNION
或UNION ALL
来组合查询。但需要注意的是,UNION
会去除重复记录,而UNION ALL
则直接合并所有结果,不进行去重。
存储过程:在支持的数据库系统中,可以编写存储过程来封装这一系列查询逻辑,一次性从数据库获取所有数据,然后在PHP端处理结果集。
使用PDO的预处理语句和批处理:虽然这不直接减少数据库访问次数,但可以提高安全性并可能略微提升性能,特别是当有大量类似的查询时。
分页和限制返回结果:如果数据量非常大,考虑是否真的需要一次性加载所有数据,或者是否可以分批次处理。
数据库层面的优化:确保数据库索引有效,根据查询条件优化索引,以减少查询时间。
对于您的具体需求,如果表之间没有关联,且必须分别查询,一个更高效的方法是利用数组映射的方式一次性处理所有数据,但这仍然需要逐个查询。不过,如果能用到上述提到的任何一种优化策略,将大大提升效率。例如,如果四个表的数据结构一致,且只需合并所有数据,可以尝试如下简化示例:
$sql = "SELECT id, gid FROM table1
UNION ALL
SELECT id, gid FROM table2
UNION ALL
SELECT id, gid FROM table3
UNION ALL
SELECT id, gid FROM table4";
$go = $dbh->query($sql);
$arr = [];
while ($rs = $go->fetch(PDO::FETCH_ASSOC)) {
// 根据需要处理或直接存入数组
$arr[] = $rs;
}
这样,通过单次查询就能获取所有表的数据,减少了数据库交互次数,提高了效率。