php - 避免使用双 GROUP BY sql 语句的 PHP 解决方法

标签 php mysql

我想对计数的分组结果进行 SQL 查询。我能够做到这一点的唯一方法是在 PHP 的帮助下。但我确信可以通过一条 SQL 语句来完成此操作。

该表的结构如下: iduser_hash时间戳

我的 PHP 小解决方法如下所示:

$sql = 'SELECT count(id) AS \'total clicks\' FROM stats WHERE timestamp > UNIX_TIMESTAMP(NOW() - INTERVAL '.$num_days.' DAY) GROUP BY user_hash ORDER BY count(id) DESC';
$result = $mysqli->query($sql);
$count = array();
while ($row = mysqli_fetch_assoc($result)) {
    if (isset($count[$row['total clicks']])) {
        $count[$row['total clicks']]++;
    } else {
        $count[$row['total clicks']] = 1;
    }
}

foreach ($count as $k => $v) {
    echo $v." users clicked ".$k." times\n";
}

我可能会惊叹它是多么容易,但我似乎无法获得一个一体化的 SQL 解决方案。 :)

最佳答案

请尝试:

$sql = 'SELECT
    A.`user_times_clicked`,
    COUNT(A.user_hash) AS `user_count`
FROM(
    SELECT 
        count(id) AS `user_times_clicked`,
        user_hash   
    FROM 
        stats 
    WHERE 
        timestamp > UNIX_TIMESTAMP(NOW() - INTERVAL '.$num_days.' DAY) 
    GROUP BY 
        user_hash 
    ) AS A
GROUP BY    
    A.`user_times_clicked`
ORDER BY 
    COUNT(A.user_hash) DESC'

希望对您有所帮助。

关于php - 避免使用双 GROUP BY sql 语句的 PHP 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27873925/

相关文章:

php - MYSQL SELECT 语句用于选择日期期间

php - 如何在 Windows 下的 PHP 中获取*任意*(即不是当前)用户的主目录?

Mysql - 可以使用 Group By semester 吗?

mysql - 从多个左连接按日期排序

php - 异步加载 google map v3 的问题

javascript - 单击时更新表值和时间戳

php 计数 vs sql 计数 vs 计数字段?演出

mysql - 我应该给在 JSON 中存储签名的 MYSQL VARCHAR 字段多长的长度?

php - 页面加载时显示的错误消息

Mysql Group by 并按每个组的降序排列