php - Mysql从统计数据库中获取多个计数

标签 php mysql

我需要获取每个用户的唯一计数以及国家/地区计数和总费率

我想出了这个数据库的基本设计,其中 uid 是用户 id

DROP TABLE IF EXISTS `stats`;
CREATE TABLE IF NOT EXISTS `stats` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uid` int(5) UNSIGNED NOT NULL,
  `country` int(3) UNSIGNED NOT NULL,
  `ip` int(10) UNSIGNED NOT NULL,
  `date` int(10) UNSIGNED NOT NULL,
  `timestamp` int(10) UNSIGNED NOT NULL,
  `rate` int(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `stats` 
(`id`, `uid`, `country`, `ip`, `date`, `timestamp`, `rate`) VALUES
(1, 1, 10, 1111111111, 2222222222, 3333333333, 100),
(2, 1, 10, 1111111112, 2222222222, 3333333333, 100),
(3, 2, 10, 1111111111, 2222222222, 3333333333, 100),
(4, 1, 10, 1111111114, 2222222223, 3333333333, 100),
(5, 1, 11, 1111111112, 2222222223, 3333333333, 100),
(6, 1, 10, 1111111111, 2222222223, 3333333333, 100);

这是我用来获取每日计数的查询

$query="
SELECT `uid`,
COUNT(DISTINCT `ip`)AS `count`, 
`country`, 
SUM(`rate`) AS `sum`,
`date`
FROM `stats` 
GROUP BY `uid`, `date`
";
$result=mysqli_query($connection, $query) or trigger_error(mysqli_error($connection), E_USER_ERROR);
while($row = mysqli_fetch_assoc($result)){
echo 'userid:'.$row['uid'].' count:'.$row['count'].' country:'.$row['country'].' sum:'.$row['sum'].' date:'.$row['date'].'<br>';
};

我得到这个结果

userid:1 count:2 country:10 sum:200 date:2222222222
userid:1 count:3 country:10 sum:300 date:2222222223
userid:2 count:1 country:10 sum:100 date:2222222222

预期结果

userid:1 count:2 country:10=>2        sum:200 date:2222222222
userid:1 count:3 country:10=>2, 11=>1 sum:300 date:2222222223
userid:2 count:1 country:10=>1        sum:100 date:2222222222

我想我需要像 SELECT DISTINCT country FROM stats 这样的东西来在主查询中获取国家/地区计数。

请查看并提出任何可能的方法。

谢谢

最佳答案

您可以使用子查询来实现这一点:

SELECT
  t.uid,
  SUM(t.count) AS count,
  GROUP_CONCAT(CONCAT(t.country, ' => ', t.views) SEPARATOR ', ') AS country,
  SUM(t.sum) as sum,
  t.date
FROM (
  SELECT
    s.uid,
    COUNT(DISTINCT s.ip) AS count,
    s.country,
    COUNT(s.country) as views,
    SUM(s.rate)AS sum,
    s.date
  FROM stats s
  GROUP BY uid, date, country
  ) AS t
GROUP BY
t.uid,
t.date

也可在 sqlfiddle 获得.

关于php - Mysql从统计数据库中获取多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39138803/

相关文章:

php - 登录处理系统出错

php - 使用 php exec 和 amixer 设置音量

php - 存储数据的奇怪字符编码,旧脚本显示它们很好,新脚本却没有

javascript - 使用 javascript 更新文本框中的值

php - 从我网站的另一部分获取 wordpress 特色图片 url

MySQL 复杂条件选择查询

sql - 能够加入 MySQL 的合理行数和表数是多少?

mysql - 如果列不同,我真的需要在 JOINS 中包含表名或 AS 吗?

MYSQL删除查询之谜

mysql - 将表 1 中的一列左连接到表 2 中的两列