如何在MySQL数据库中添加多个元组的值并使用php代码获取它们?

时间:2017-05-20 22:08:42

标签: php mysql

我有两个数据库表

     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的帮助下将新值存储在另一个表中?

2 个答案:

答案 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'])."' ";
  • 或intval()如果结果是整数。

编辑:对于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();