我有两个数据库表
1. graduate_survey
G_id(pk),PO1,PO2
2. Alumni_survey
A_id(pk),PO1,PO2
假设我在两个表中都插入了值。现在我必须将来自Gradu_survey的PO1,PO2的值与Alumni_survey的PO1,PO2相加。如何在MySQL查询的帮助下添加它们?以及如何在php的帮助下将新值存储在另一个表中?
答案 0 :(得分:1)
SELECT SUM(t.P01) AS total_P01, SUM(t.P02) AS total_P02
FROM (SELECT P01, P02 FROM graduate_survey
UNION ALL
SELECT P01, P02 FROM Alumni_survey) t
这很有效。基于:How can I sum columns across multiple tables in MySQL? 我没有将其标记为重复,因为资源是一个值,这里有两个。
从包含18k + 57k条目的2个真实表中添加DECIMAL(10,6)类型的结果,查询大约需要0.15秒才能完成。
第2部分:INSERT
假设您的新表在T_id(pk)上有AUTO INCREMENT,并且您已使用mysql_fetch_assoc()
将上一个结果提取到$ row:
$query_string = "INSERT INTO Total_survey
SET P01 = '".floatval($row['total_P01'])."',
P02 = '".floatval($row['total_P02'])."' ";
编辑:对于3个表:
SELECT SUM(t.P01) AS total_P01, SUM(t.P02) AS total_P02
FROM (SELECT P01, P02 FROM graduate_survey
UNION ALL
SELECT P01, P02 FROM Alumni_survey
UNION ALL
SELECT P01, P02 FROM faculty_survey) t
但我不认为这是个好主意。您具有包含相似数据的相同结构的表。一种更好的方法是在一个表中再增加1个列,并为每个记录写入毕业生,校友或院系。为此作业保留3个单独的表只会使您的数据库结构难以理解且难以使用。你可以制作这两个表:
Survey: id(pk), group_id(int), PO1, PO2
和描述表:
Groups: group_id(pk), group_name(varchar)
通过这种方式,您可以拥有无限数量的调查组,您可以从程序中动态扩展其数量并更轻松地处理数据。
答案 1 :(得分:1)
使用PDO连接:
$sql = 'SELECT gs.G_id G_id, as_.A_id A_id, (gs.PO1 + gs.PO2 + as_.PO1 + as_.PO2) total from graduate_survey gs, Alumni_survey as_';
$stmt = $conn->prepare('INSERT INTO table_name(G_id, A_id, total) VALUES(?, ?, ?)');
$conn->beginTransaction();
foreach ($conn->query($sql) as $row) {
$stmt->bindValue(1, $row['G_id'], PDO::PARAM_INT);
$stmt->bindValue(2, $row['A_id'], PDO::PARAM_INT);
$stmt->bindValue(3, $row['total'], PDO::PARAM_INT);
$stmt->execute();
}
$stmt->commit();