下面介绍如何优化php中foreach遍历数据库连表查询。
原来有需要多表查询的数据时,我都是通过php中foreach语句中,连表查询然后再拼接成需要的数据
大致代码如下(这里结合了thinkphp):
(其实可以通过两张表连表查询就能获得结果,不知道当时脑回路怎么想的)
得到结果如下:
这里是通过查询a表的目录,然后再通过foreach与b表连接,然后在foreach里拼接,再与a表连接,再拼接,最后返回结果集。但是这里的笛卡尔积是三张表的数据的数据数量。如果表数据多了,查询时间很长。
但是可以通过两条sql语句,再拼接就可以得到想要的结果。原理就是将连接两张表的条件通过in语句来一次性查询出来,再通过foreach语句,如果判断条件相等,就拼接结果。这样就避免了foreach中一条条的遍历,大大优化了select查询。
大致代码如下(这里结合了thinkphp):
就可以得到查询结果:
这里除了大数组key不一样外,其他都一样。在模板中for和volist都是忽略key的,所以结果并不受影响,就是需要的结果。
如上就是php中如何优化foreach多表查询最简单的解决方案。