详解多个结果集并集之union all和array_merge方法
2017-02-14| 程成| 1572| 0| MySQL

自己在做网站地图的时候,遇到要合并两个结果集的情况,第一反映就是使用array_merge方法,结果很实用,两个方法返回的结果,通过下面的array_merge下就合并成需要的结果了。后来发现还有种在数据库查询的时候就进行合并,通过union和union all方法。下面是总结的union、union all和array_merge方法的一些使用方法和注意事项:


一、union和union all用法和注意事项


union用来合并两个或者多个select语句结果集,并且消除重复行(每个列名值相等才会合并)。如果允许重复的值,可以使用union all,用法和union一样


1、使用方法:


blob.png


2、注意事项


两边select必须要有相同数量的列,如果数量不相等就会报错;

同时,列也必须要是相似的数据类型;

列中select字段的顺序也必须相同;

合并结果集中的列名和第一个select中列名相同;

如果子句中order by,limit时,需要括号()包起来;

注:thinkphp也有对应的union方法和union all方法


二、array_merge用法和注意事项


1、用法


array_merge是将多个数组合并成一个数组,有点类似于union合并select,因为select的结果也是数组。如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。如果想不合并,请使用array_merge_recursive。


blob.png


2、注意事项


array_merge虽然会合并相同键名的数组,但是如果键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引;

array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组




×
作者:程成
QQ:492245711