如何将来自 4 个不同表格的信息显示为一个表格?我有 4 个包含相关信息的表。这些表包含包、组织子项和系统用户数据。我想查询一个组织订阅了什么类型的套餐,以及该组织下注册了多少 child 和用户。表格中包含的示例数据如下所示。
包表:
组织表:
child table :
用户表:
我的查询如下图所示:
SELECT SQL_CALC_FOUND_ROWS `id_org`, `org_name`, `package_name`
,COUNT(id_child) AS child_count, COUNT(idu) AS user_count FROM organisations,packages,children,system_users
WHERE organisations.id_org=children.org_id AND organisations.id_org=system_users.org_id
AND organisations.org_package_id=packages.id_package
查询的问题是它只显示一个组织,如果它有一个 child 和一个用户 使用其 org_id 列出。我想列出所有组织的所有数据及其订阅的包名称, 该特定组织下列出的 child 总数,下面列出的用户总数 该特定组织,对于组织没有 child 、用户或两者的情况,则为零。 以下是我想要的结果。
期望的结果:
最佳答案
这会做你想做的......你需要左连接两个不会有你所有记录的表,这样用户和 child ......对这些进行计数并使用 COALESCE 将其拉出以处理空值
注意:
您的预期结果不正确...组织表中没有 org_id = 33。 Teddy and the Wailers
的计数不应为 2,而应为 0——或者您希望将 users 中的 org_id 更改为 38 而不是 33。
查询:
SELECT
o.org_name AS 'Organisation',
p.package_name as 'Package Name',
COALESCE(t.num_children, 0) AS 'No of Children',
COALESCE(t1.num_users, 0) AS 'Number of Users'
FROM organisation o
JOIN packages p ON p.package_id = o.package_id
LEFT JOIN
( SELECT
COUNT(*) as num_children, id_org
FROM children
GROUP BY id_org
) as t ON t.id_org = o.org_id
LEFT JOIN
( SELECT
COUNT(*) as num_users, org_id
FROM users
GROUP BY org_id
) as t1 ON t1.org_id = o.org_id
输出:
+-----------------------+-----------------+-----------------+------------------+
| Organisation | Package Name | No of Children | Number of Users |
+-----------------------+-----------------+-----------------+------------------+
| Marks of Awesomeness | Basic | 2 | 3 |
| John Hopkins Hospital | Pro | 2 | 0 |
| Teddy and the Wailers | Premium | 0 | 0 |
| Lawrence Movers | Basic | 0 | 0 |
+-----------------------+-----------------+-----------------+------------------+
编辑:
如果您将用户表中的 ID 33 更改为 38 以匹配所需的结果,那么您将得到以下结果:QUERY
输出:
+-----------------------+-----------------+-----------------+------------------+
| Organisation | Package Name | No of Children | Number of Users |
+-----------------------+-----------------+-----------------+------------------+
| Marks of Awesomeness | Basic | 2 | 3 |
| John Hopkins Hospital | Pro | 2 | 0 |
| Teddy and the Wailers | Premium | 0 | 2 |
| Lawrence Movers | Basic | 0 | 0 |
+-----------------------+-----------------+-----------------+------------------+
关于php - Mysql将4个不同表的信息显示为一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25169912/