自己在做网站地图的时候,遇到要合并两个结果集的情况,第一反映就是使用array_merge方法,结果很实用,两个方法返回的结果,通过下面的array_merge下就合并成需要的结果了。后来发现还有种在数据库查询的时候就进行合并,通过union和union all方法。下面是总结的union、union all和array_merge方法的一些使用方法和注意事项:
union用来合并两个或者多个select语句结果集,并且消除重复行(每个列名值相等才会合并)。如果允许重复的值,可以使用union all,用法和union一样
两边select必须要有相同数量的列,如果数量不相等就会报错;
同时,列也必须要是相似的数据类型;
列中select字段的顺序也必须相同;
合并结果集中的列名和第一个select中列名相同;
如果子句中order by,limit时,需要括号()包起来;
注:thinkphp也有对应的union方法和union all方法
array_merge是将多个数组合并成一个数组,有点类似于union合并select,因为select的结果也是数组。如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。如果想不合并,请使用array_merge_recursive。
array_merge虽然会合并相同键名的数组,但是如果键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引;
array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组