0

我正在尝试研究如何使用 codeigniter 在 2 个 mysql 数据库中组合来自同一个表的结果。

两个表具有相同的列名,但数据库具有不同的连接设置。

我目前正在尝试这个:

public function getAllNames() {

$sql1 = <<SQL
        SELECT 
          id, name, CONCAT(name, ' (', id, ')') AS name2
        FROM
          db1.table
        ORDER BY name
SQL;

$sql2 = <<SQL
        SELECT 
          id, name, CONCAT(name, ' (', id, ')') AS name2
        FROM
          db2.table
        ORDER BY name
SQL;

$q = $this->db->query($sql1." UNION ".$sql2);

return $q->result();

}

将每个数据库的相同查询存储在 2 个变量中,然后尝试使用 UNION 组合它们。但是,这是行不通的,因为它无法将数据库名称识别为数据库(无论如何它都不会有每个数据库的连接设置)。我认为 ORDER BY 在这里也放错了地方。我不确定我应该在哪里为每个查询指定数据库,或者这种方法是否有效。

有任何想法吗?

4

2 回答 2

3

实际上,接受的答案不起作用,因为查询函数不返回数组,而是返回数据库结果对象

正如在这个问题上看到的,您需要调用result函数,它返回一个对象数组(或result_array,它返回一个数组数组),并合并这些数组:

使用结果

$array_1 = $this->db->get()->result();
$array_2 = $this->db->get()->result();
$final_array = array_merge($array_1, $array_2);

foreach ($final_array as $row){
    echo $row->id;
    echo $row->description;
}

使用result_array

$array_1 = $this->db->get()->result_array();
$array_2 = $this->db->get()->result_array();
$final_array = array_merge($array_1, $array_2);

foreach ($final_array as $row){
    echo $row['id'];
    echo $row['description'];
}
于 2016-01-29T19:25:58.700 回答
1

试试喜欢

$DB1 = $this->load->database('db1');
$DB2 = $this->load->database('db2');

$res1 = $DB1->query($sql1);
$res2 = $DB2->query($sql2);
$result = array_merge($res1 , $res2);
于 2013-08-30T12:39:30.180 回答