我正在尝试使用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 BYs在这里也是错误的。我不确定在哪里为每个查询指定数据库,或者这个方法是否可行。
有什么想法吗?
答案 0 :(得分:2)
实际上,接受的答案不起作用,因为查询函数不返回数组,而是返回database result object。
如this question所示,您需要调用结果函数,该函数返回一个对象数组(或 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'];
}
答案 1 :(得分:1)
尝试
$DB1 = $this->load->database('db1');
$DB2 = $this->load->database('db2');
$res1 = $DB1->query($sql1);
$res2 = $DB2->query($sql2);
$result = array_merge($res1 , $res2);