我有 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.....”。我的查询可能出了什么问题?谁能帮我解决这个问题吗?
您对总和使用了双重别名,例如
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
不会从外部数据中填充,那么它可能是安全的。