繁体   English   中英

MYSQL在多个类别上的计数(*)

[英]MYSQL count (*) on multiple categories

我要尝试做的是创建一个简单的数组,该数组将所有广告点击次数的总和计入我正在编写的简单广告跟踪器的计数中。 在关于Stackoverflow的另一篇文章中,阅读了以下解决方案,但它并不优雅。

基本上,我们目前正在运行以下概述的6个广告,我们只希望将几乎组织成一个阵列的那些广告计数,以便我们可以执行do循环来展示广告。 自然地,用SQL硬编码计数是没有意义的,因为稍后我们将添加更多广告。 我考虑过要创建一个do循环来遍历每个count(*)并将其分配给一个变量,但这会导致我们不必要的次数访问mysql服务器。

是否有一种简单的方法可以将此SQL语句转换为可以在PHP中轻松生成的内容。

即$ ads = array('money1','money2','money3','st1','st2','st3')

您将如何退还计数? 这是最好的方法吗?

mysql> SELECT ad,
   SUM(ad = 'money1') AS ct,
   SUM(ad = 'money2') AS ct,
   SUM(ad = 'money3') AS ct,
   SUM(ad = 'st1') AS ct,
   SUM(ad = 'st2') AS ct,
   SUM(ad = 'st3') AS ct

FROM bloggingengineOptins
GROUP BY ad;

这是输出

+--------+------+------+------+------+------+------+
| ad     | ct   | ct   | ct   | ct   | ct   | ct   |
+--------+------+------+------+------+------+------+
| NULL   | NULL | NULL | NULL | NULL | NULL | NULL |
|        | 0    | 0    | 0    | 0    | 0    | 0    |
| 7230   | 0    | 0    | 0    | 0    | 0    | 0    |
| money1 | 11   | 0    | 0    | 0    | 0    | 0    |
| money2 | 0    | 12   | 0    | 0    | 0    | 0    |
| money3 | 0    | 0    | 10   | 0    | 0    | 0    |
| st     | 0    | 0    | 0    | 0    | 0    | 0    |
| st1    | 0    | 0    | 0    | 3    | 0    | 0    |
| st2    | 0    | 0    | 0    | 0    | 4    | 0    |
| st3    | 0    | 0    | 0    | 0    | 0    | 4    |
+--------+------+------+------+------+------+------+
10 rows in set

mysql> 

在表格下方应用“修复”后,现在如下所示:

SELECT ad, count(1) ct FROM bloggingengineOptins GROUP BY ad;

+--------+-----+
| ad     | ct  |
+--------+-----+
| NULL   |  13 |
|        | 915 |
| 7230   |   1 |
| money1 |  11 |
| money2 |  13 |
| money3 |  10 |
| st     |   1 |
| st1    |   6 |
| st2    |  11 |
| st3    |   6 |
+--------+-----+
10 rows in set

完美的输出

SELECT ad, count(1) ct FROM bloggingengineOptins GROUP BY ad;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM