多个类别的MYSQL计数(*)

时间:2014-04-16 16:20:10

标签: php mysql sql arrays

我尝试做的是创建一个简单的数组,它可以获得我所有广告点击的总和,并让我重新计算一个简单的广告跟踪器,我正在写作。在Stackoverflow上的另一篇文章中,阅读以下解决方案,但它并不优雅。

基本上我们目前正在运行下面列出的6个广告,我们只想将那些几乎组织成阵列的数量放在一个阵列中,这样我们就可以做一个循环来展示广告。当然,在SQL中对计数进行硬编码是没有意义的,因为我们稍后会添加更多广告。我想创建一个do循环来通过每个计数(*)并将它分配给一个变量,但这会导致我们击中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

完美输出

1 个答案:

答案 0 :(得分:1)

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