1

我正在尝试从视图中的多个表中获取数据列表以进行分析-大部分数据来自一个表,然后我需要从多个其他表中获取计数以显示登录次数、用户数等.

我正在使用以下查询(简化为仅显示一些行和一个连接):

Select 
    companies.company_name, companies.last_login, companies.last_ip,
    (SELECT COUNT(*) FROM auditing_master GROUP BY company_id) AS audit_count
From
    companies
Left Join
    auditing_master On auditing_master.company_id = companies.id 
Group by 
    companies.id

当我运行它时,我得到一个错误:

#2014 - Commands out of sync; you can't run this command now

如果我在 SELECT COUNT (*) 中没有 GROUP BY 的情况下运行它,那么它不会给出任何错误,但它会返回 auditing_master 表中所有条目的计数,无论它指的是哪个公司。

如何获得一个查询来向我显示公司表中的所需数据,同时还显示按公司 ID 分组的审计主(和其他人)的总数?

编辑

使用多个计数/联接时的代码:

Select 
    c.company_name, c.last_login, c.last_ip,
    COUNT(am.company_id) AS audit_count,
    COUNT(u.company_id) AS users,
    COUNT(e.company_id) AS employees
From
    companies c
Left Join
    auditing_master am On am.company_id = c.id 
Left Join
    users u On u.company_id = c.id 
Left Join
    employees e On e.company_id = c.id 
Group by 
    c.id

此查询在 WAMP 上的 PHPMyAdmin 中本地查询,只有大约 10 家公司需要 7 秒才能完成,并给出与任何内容无关的“无意义”结果。

谢谢

4

2 回答 2

2
  1. SELECT 子句中的内部查询必须返回SINGLE VALUE RESULT
  2. 类似的东西,应该带来你需要的东西。

    Select 
        companies.company_name, companies.last_login, companies.last_ip,
        COUNT(*) AS audit_count  
    From  
        companies  
    Left Join  
        auditing_master On auditing_master.company_id = companies.id   
    Group by   
        companies.id  
    
于 2013-10-21T14:09:02.683 回答
1

你试过这个吗?(不需要子查询,因为其中没有 where 子句,并且LEFT JOIN已经添加了按 分组的 auditing_master 行company_id = companies.id

Select 
    companies.company_name, companies.last_login, companies.last_ip,
    COUNT(company_id) AS audit_count
From
    companies
Left Join
    auditing_master On auditing_master.company_id = companies.id 
Group by 
    companies.id

编辑

也许如果您在给定公司没有 auditing_master 时添加 IF 语句以避免 COUNT 。

SELECT
    companies.company_name, companies.last_login, companies.last_ip,
    IFNULL(am.company_id,0,COUNT(am.company_id)) AS audit_count
FROM
    companies
INNER JOIN
    auditing_master am ON auditing_master.company_id = companies.id 
GROUP BY
    companies.id

随意把整个 SQL... 因为问题可能出在其他地方!

于 2013-10-21T14:07:20.743 回答