回答

收藏

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

技术问答 技术问答 102 人阅读 | 0 人回复 | 2023-09-12

这是我的脚本代码0 F* I  |6 X# H2 u. v
$sql ="SELECT     t.Contact_Email,2 ?* e% \, v2 E% |% f
                  e1.Contact_Email email1,
2 E2 K* h8 X6 r- }                  e2.Contact_Email email2,2 N4 a0 j0 D9 S* X  R" x
                  e3.Contact_Email email3,+ z, ~. a/ y5 k5 T5 P. }
                  e4.Contact_Email email40 B) b" e, C) p; W$ C
         FROM     (& t* F+ V+ v( H" F
                  SELECT e.Contact_Email FROM email1 e
7 Y9 B1 f0 b$ ?  T5 i                  UNION ALL 2 s  L" ?- z' P
                  SELECT e.Contact_Email FROM email2 e$ {1 A: b! c; m* _: r! E' K
                  UNION ALL
% m" P* [3 b1 t8 {/ [                  SELECT e.Contact_Email FROM email3 e
# e; y$ M( `7 }0 c% {) @                  UNION ALL
7 k7 D! N9 e8 ?4 E; \1 u                  SELECT e.Contact_Email FROM email4 e
( {# y/ r7 e0 R6 J" P0 @/ n0 Y                  ) t
2 Z( H: a, X7 q% P& n        LEFT JOIN email1 e1" ?1 Z: o+ e6 F& r6 k' i; j
              ON  t.Contact_Email = e1.Contact_Email
1 L5 Y6 S$ W6 `& d7 y6 Y2 K1 `$ n, b        LEFT JOIN email2 e2
9 g9 Y& ~& w' h; x3 C/ b              ON  t.Contact_Email = e2.Contact_Email
6 M  `! }' F. Y! C3 d/ y0 X9 `        LEFT JOIN email3 e37 M$ A+ X5 h0 [) [9 f0 Z9 r* T
              ON  t.Contact_Email = e3.Contact_Email
. ^' C0 \# N8 E# E6 `, g0 w5 p. U        LEFT JOIN email4 e4# T" O' R/ K4 n  N1 V* v: o$ k
              ON  t.Contact_Email = e4.Contact_Email";1 G" X8 L0 ^; a1 _9 O; ]7 V0 Z
echo '
Email[/td]';
  \  p- O! F* D- Gfor ($i=1;$i';
6 b, |: j& S; w# j5 A* L1 \$result = mysql_query($sql);$ i# M: R; d& K: p
while ($row = mysql_fetch_array($result)) {- w9 J3 E. K# p/ u
    echo '
'.$row['Contact_Email'].'[/td]';
; t7 j# l2 ^, M/ p    for ($i=1;$i
';
8 [( o, R+ E, N( M( D输出为:
( }7 g; x- N6 W6 h5 X  E) P. z
: B2 {0 M2 `* Z7 f$ ^! F
5 g. O! @- ?( H3 }9 A# P: D
, `& D, W7 M1 U+ y8 `  l! {# A该表的奇数列表示“打开”操作,其偶数列表示“单击”操作。现在,我想在最右边添加一个“总计”列。' M, z/ G1 Z; ~. p4 S. H# |
因此,在图片中,标题表示 电子邮件1,电子邮件3,电子邮件5 …, 这些列表示“打开”操作,而列表示 电子邮件2,电子邮件4,电子邮件6 …
2 X9 L: Z9 ]5 h. D则表示单击操作。" `; I* ~+ L3 g. a6 n. O
现在,总计应计算如下:  O& s3 D' n1 d/ W1 D. ]
公开操作值得2分,点击值得5分。因此,如果打开操作有2个“是”值,而点击操作有3个“是”值,则总数应为 2x2 + 3x5 = 19 。
6 B+ e0 j7 Y% p# n那就是我想要的输出。我怎样才能做到这一点?: S, `- I$ x3 H  Q; l) E% y3 ?9 ?
               
5 U3 d* K! b+ n/ }( N解决方案:
7 Z8 I& v5 T: O9 Z8 f                0 g, s; `- @( z
4 ?: s% P  T$ A9 m' K
' }" _3 ~3 t* @0 h1 h  |% s
                给定您已发布的代码,这就是我的处理方式。
4 x# k- j' v* T4 B5 R, i首先,我将创建一个关联的查找数组,其键是列名,其值是对应的点值;它看起来像这样:7 L2 C/ k, `+ h+ J
$pointVals = array('email1' => 2, 'email2' => 5, 'email3' => 2, ... );
. I/ |+ s) q( p" x2 b& i2 l1 X  h您可以根据需要生成此数组。我可能会从数据库中的查找表中读取它。请注意,此数组仅包含与计算相关的列。- Q2 T$ ~# y" A' B
接下来,我将包括下面的代码 里面 的while循环。$row是您对调用返回的记录数组mysql_fetch_array()。- z- }& E) K0 M- e2 Q. J6 Z
while ($row = mysql_fetch_array($result)) {
; s* S6 S; F3 a, A  ... // existing code goes here
5 u: X" N! c: J( b- N4 v  $rowSum = 0;
4 R: `3 |0 k4 [. `+ d( v  foreach($pointVals as $colName => $val)
3 ^# E1 Y. v* Y& ]( A  {, ^' ~* Z$ M0 J
    if(isset($row[$colName]) && !empty($row[$colName]))9 R# S' s: ?2 o* n1 W: r  g) E
      $rowSum += $val;
! C9 E& B( L# ]' l* m4 K' ^3 }+ o5 P1 l  }
: A9 K4 @: G! _% w6 S  ... // do stuff with $rowSum here% H$ y- L! Y* o- \( s0 b
}% [4 E, A4 Q5 f' T
话虽如此,我强烈建议您从 mysql 驱动程序转换为 mysqliPDO ,因为已弃用 mysql 并将其从PHP
" v+ C4 M/ A2 v3 R5 h7中删除。此外,我强烈怀疑您的查询可以简化和改进,但是我需要看看基本表可以提出任何建议。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则