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_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 に答える