来自不同数据库的相同表联合

问题描述 投票:0回答:1

我有 03 个 MySQL 数据库,分别是 2022_db、2023_db 和 2024_db。 03 数据库中的所有表和表结构都是相同的,并且包含不同的值。我想将 02 数据库 2022_db 和 2023_db 中的两个表中的值总和放入单个报告中。表被命名为 vote & facne_budget_issue。这些列是投票和金额。我使用以下查询来做到这一点。

 public function amt_tot()
{
    $otherdb2022 = $this->load->database('2022_db', TRUE);
    $otherdb2023 = $this->load->database('2023_db', TRUE);
    $q = $this->db->query("
     select 
            SELECT finance_vote.vote, SUM(amount) AS amount
            FROM (
            SELECT finance_vote.vote, SUM(amount) AS amount AS amt_2022
            FROM $otherdb2022.finance_budget_issue
            GROUP BY vote
            UNION ALL
            SELECT finance_vote.vote, SUM(amount) AS amount AS amt_2023
            FROM $otherdb2023.finance_budget_issue
            GROUP BY vote
    ) AS tot
    GROUP BY vote");

    if ($q->num_rows() > 0) {
        $results = $q->result();
        return $results;
    }
}

但是查询显示系统错误“near 'SELECT vote, SUM(amount) AS amount FROM.....”。我的查询可能出了什么问题?谁能帮我解决这个问题吗?

mysql codeigniter
1个回答
0
投票

您对总和使用了双重别名,例如

SUM(amount) AS amount AS amt_2022

但是,这里使用的更好的模式是首先合并两个表,然后将其聚合为子查询并获取总计:

SELECT vote, SUM(amount) AS amount
FROM (
    SELECT vote, amount
    FROM $otherdb2022
    UNION ALL
    SELECT vote, amount
    FROM $otherdb2023
) t
GROUP BY vote;

顺便说一句,使用 PHP 变量绑定表名通常是不好的做法。 这会使您的代码容易受到外部 SQL 注入攻击。 话虽这么说,如果您确定

$otherdb2022
$otherdb2023
不会从外部数据中填充,那么它可能是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.