合并2查询缺少索引的位置

时间:2018-06-13 07:58:31

标签: php mysql

我需要合并2个查询结果的结果,在第二个查询中,索引缺失。

示例:

query 1: SELECT A.ID AS ID1, B.ID AS ID2 WHERE......

// var_dump();
$result_1 = array(
  0 => array(
       ID1 => 1,
       ID2 => 5
  ),
  1 => array(
       ID1 => 5,
       ID2 => 4
  ),
  2 => array(
       ID1 => 7,
       ID2 => 6
  ),
 3 => array(
       ID1 => 7,
       ID2 => 8
  )
);

query 2: SELECT A.ID AS ID1 WHERE......

// var_dump();
$result_2 = array(
  0 => array(
       ID1 => 5
  ),
  1 => array(
       ID1 => 9
  ),
  2 => array(
       ID1 => 10
  )
);

我想在查询2中为每个索引自动插入NULL值:ID2 => NULL所以我可以合并:

$result_3 = array_merge($result_1, $result_2);

我可以使用查询,还是我必须在执行query2后迭代$ result_2?

像:

foreach ( $result_2 as $i => $v ) {
   $result_2[$i]["ID2"] = NULL;
}

$result_3 = array_merge($result_1, $result_2);

我的目标,顺便说一下,就是有了这个结果:

$result_3 = array(
      0 => array(
           ID1 => 1,
           ID2 => 5
      ),
      1 => array(
           ID1 => 5,
           ID2 => 4
      ),
      2 => array(
           ID1 => 7,
           ID2 => 6
      ),
      3 => array(
           ID1 => 7,
           ID2 => 8
      ),
      4 => array(
           ID1 => 9,
           ID2 => NULL
      ),
      5 => array(
           ID1 => 10,
           ID2 => NULL
      )
    );

您可以看到我没有从$ result_2插入索引0,因为ID1已经插入且ID2为NULL。

编辑:我已经写过这个解决方案了。它有效,但我想知道在性能方面是否有一个好的解决方案:

$result_2 = //resultset of SELECT A.ID AS ID1, NULL AS ID2 ....

$result_3 = $result_1;

    foreach ( $result_2 as $i => $v ) {

        if ( !in_array($v['ID1'],array_column($result_1, "ID1")) ) {

            $result_3[] = $result_2[$i];
        }

    }

1 个答案:

答案 0 :(得分:2)

您可以更改您的选择,以便选择NULL作为第二个值...

SELECT A.ID AS ID1, null as ID2 WHERE