php - mysql语句中的组子查询计数?

标签 php mysql sql

想知道这是否可能。在下面的声明中,我从不同的表中获取计数。这会打印每个 user_id 的总计数组。

有什么方法可以组合这些总计,以便返回包含总计的单个数组吗?我使用子查询是因为连接在性能方面受到了影响,因此连接不是一个选项。

$stmt = $db->prepare("
    SELECT
        (SELECT COUNT(*) FROM log1 WHERE log1.user_id = users.user_id AS l1,
        (SELECT COUNT(*) FROM log2 WHERE log2.user_id = users.user_id AS l2,
        (SELECT COUNT(*) FROM log3 WHERE log3.user_id = users.user_id AS l3,
        (SELECT COUNT(*) FROM log4 WHERE log4.user_id = users.user_id  AS l4
    FROM computers
    INNER JOIN users
        ON users.computer_id = computers.computer_id    
    WHERE computers.account_id = :cw_account_id AND computers.status = :cw_status
");

$binding = array(
    'cw_account_id' => $_SESSION['user']['account_id'],
    'cw_status' => 1
);

$stmt->execute($binding);

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

目前我正在做这样的事情,并返回以获得我想要的结果:

foreach($result as $key)
{
    $new['l1'] = $new['l1'] + $key['l1'];
    $new['l2'] = $new['l2'] + $key['l2'];
    $new['l3'] = $new['l3'] + $key['l3'];
    $new['l4'] = $new['l4'] + $key['l4'];
}

return $new;

最佳答案

使用SUM aggregate function :

$stmt = $db->prepare("
    SELECT
        SUM((SELECT COUNT(*) FROM log1 WHERE log1.user_id = users.user_id)) AS l1,
        SUM((SELECT COUNT(*) FROM log2 WHERE log2.user_id = users.user_id)) AS l2,
        SUM((SELECT COUNT(*) FROM log3 WHERE log3.user_id = users.user_id)) AS l3,
        SUM((SELECT COUNT(*) FROM log4 WHERE log4.user_id = users.user_id)) AS l4
    FROM computers
    INNER JOIN users
        ON users.computer_id = computers.computer_id    
    WHERE computers.account_id = :cw_account_id AND computers.status = :cw_status
");

此查询返回一行,其中包含总计数和您所需的结果:

$new = $result[0];

关于php - mysql语句中的组子查询计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26229784/

相关文章:

javascript jquery datatables 未定义不是一个函数

php - CDbCommand 未能执行 SQL 语句。?

php - 从 Sybase 数据库 ODBC 调用

mysql - 我只想要表格中的一行。进行 JOIN 更好还是只进行两次选择调用

sql-server - T-SQL 中的 VLOOKUP 式范围查找

sql - 是否可以找到用于在 SQL SERVER CLR 中加载程序集的原始路径?

php - 在 PHP 中每出现 3 个字符替换字符串

php - VHost 和 htaccess - 500 内部服务器错误

php - 如何限制 "SELECT"结果?

mysql float 最小值列