一尘不染

如何在mysql表中添加最后一列

sql

这是我的脚本代码

$sql ="SELECT     t.Contact_Email,
                  e1.Contact_Email email1,
                  e2.Contact_Email email2,
                  e3.Contact_Email email3,
                  e4.Contact_Email email4
         FROM     (
                  SELECT e.Contact_Email FROM email1 e
                  UNION ALL 
                  SELECT e.Contact_Email FROM email2 e
                  UNION ALL 
                  SELECT e.Contact_Email FROM email3 e
                  UNION ALL 
                  SELECT e.Contact_Email FROM email4 e
                  ) t
        LEFT JOIN email1 e1
              ON  t.Contact_Email = e1.Contact_Email
        LEFT JOIN email2 e2
              ON  t.Contact_Email = e2.Contact_Email
        LEFT JOIN email3 e3
              ON  t.Contact_Email = e3.Contact_Email
        LEFT JOIN email4 e4
              ON  t.Contact_Email = e4.Contact_Email";

echo '<table><thead><tr><th>Email</th>';
for ($i=1;$i<5; $i++){
    echo "<th>email $i</th>";
}
echo '</tr></thead><tbody>';

$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
    echo '<tr><td>'.$row['Contact_Email'].'</td>';
    for ($i=1;$i<5; $i++){
        echo '<td>'.(empty($row['email'.$i])?'no':'yes').'</td>';
    }
    echo '</tr>';
}
echo '</tbody></table>';

输出为:

电流输出

该表的奇数列表示“打开”操作,其偶数列表示“单击”操作。现在,我想在最右边添加一个“总计”列。

因此,在图片中,标题表示 电子邮件1,电子邮件3,电子邮件5 …, 这些列表示“打开”操作,而列表示 电子邮件2,电子邮件4,电子邮件6 …
则表示单击操作。

现在,总计应计算如下:

公开操作值得2分,点击值得5分。因此,如果打开操作有2个“是”值,而点击操作有3个“是”值,则总数应为 2x2 + 3x5 = 19

那就是我想要的输出。我怎样才能做到这一点?


阅读 188

收藏
2021-05-16

共1个答案

一尘不染

给定您已发布的代码,这就是我的处理方式。

首先,我将创建一个关联的查找数组,其键是列名,其值是对应的点值;它看起来像这样:

$pointVals = array('email1' => 2, 'email2' => 5, 'email3' => 2, ... );

您可以根据需要生成此数组。我可能会从数据库中的查找表中读取它。请注意,此数组仅包含与计算相关的列。

接下来,我将包括下面的代码 里面while循环。$row是您对调用返回的记录数组mysql_fetch_array()

while ($row = mysql_fetch_array($result)) {
  ... // existing code goes here
  $rowSum = 0;
  foreach($pointVals as $colName => $val)
  {
    if(isset($row[$colName]) && !empty($row[$colName]))
      $rowSum += $val;
  }
  ... // do stuff with $rowSum here
}

话虽如此,我强烈建议您从 mysql 驱动程序转换为 mysqliPDO ,因为已弃用 mysql 并将其从PHP
7中删除。此外,我强烈怀疑您的查询可以简化和改进,但是我需要看看基本表可以提出任何建议。

2021-05-16