gpt4 book ai didi

php - Mysql将4个不同表的信息显示为一个表

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:55 25 4
gpt4 key购买 nike

如何将来自 4 个不同表格的信息显示为一个表格?我有 4 个包含相关信息的表。这些表包含包、组织子项和系统用户数据。我想查询一个组织订阅了什么类型的套餐,以及该组织下注册了多少 child 和用户。表格中包含的示例数据如下所示。

包表:

<表类="s-表"><头>package_idpackage_name<正文>12基础21专业版33高级版

组织表:

<表类="s-表"><头>组织编号组织名称package_id<正文>18令人敬畏的标志1224约翰霍普金斯医院2138泰迪和哭泣者3378劳伦斯搬运工12

child table :

<表类="s-表"><头>id_childid_org child_nameid_org<正文>14马克沃克1822简·奎因2438莉莉奥黛丽2444唐娜玛丽18

用户表:

<表类="s-表"><头>idu组织编号名字名字<正文>8718约翰母鹿9233简母鹿10718马丁简短11218贾森续集12733乔希拉德诺

我的查询如下图所示:

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 、用户或两者的情况,则为零。以下是我想要的结果。

期望的结果:

<表类="s-表"><头>组织包名 child 数量用户数<正文>令人敬畏的标志基础23约翰霍普金斯医院专业版20泰迪和哭泣者高级版02劳伦斯搬运工基础00

最佳答案

这会做你想做的......你需要左连接两个不会有你所有记录的表,这样用户和 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

DEMO

输出:

+-----------------------+-----------------+-----------------+------------------+
| 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com