这是我的脚本代码
$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 。
那就是我想要的输出。我怎样才能做到这一点?
给定您已发布的代码,这就是我的处理方式。
首先,我将创建一个关联的查找数组,其键是列名,其值是对应的点值;它看起来像这样:
$pointVals = array('email1' => 2, 'email2' => 5, 'email3' => 2, ... );
您可以根据需要生成此数组。我可能会从数据库中的查找表中读取它。请注意,此数组仅包含与计算相关的列。
接下来,我将包括下面的代码 里面 的while循环。$row是您对调用返回的记录数组mysql_fetch_array()。
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 驱动程序转换为 mysqli 或 PDO ,因为已弃用 mysql 并将其从PHP 7中删除。此外,我强烈怀疑您的查询可以简化和改进,但是我需要看看基本表可以提出任何建议。