gpt4 book ai didi

php - 如何从一个 MySQL 查询生成多个报告?

转载 作者:可可西里 更新时间:2023-11-01 08:48:18 25 4
gpt4 key购买 nike

我需要报告符合多个条件的记录数。例如,每个州有多少客户。我知道我可以通过一系列 MySQL SELECT 语句来完成此操作,但这看起来很麻烦并且会产生大量(不必要的?)MySQL 调用。

你能告诉我更好的使用方法吗?我可以使用一条 SELECT 语句查询数据库,然后使用 PHP 将结果过滤到变量吗?

最佳答案

我建议为此任务创建一个 View 以隐藏查询的复杂性。此外,如果您的表架构发生变化,您可能仍希望从数据库中检索相同的信息。您将能够在一个地方更改 View ,而不必在可能的多个地方更改查询以满足您的架构更改。

不过,我只会向您展示查询,因为无论如何您都需要知道如何执行查询才能创建 View 。


以您生活在每个州的客户为例,假设您还需要有关有多少客户具有相同姓氏的统计信息。

我已经在这个 SqlFiddle 设置了一个模拟结构,你的数据库可能是什么样子的.

具有相同姓氏的客户

以下查询可用于获取具有相同姓氏的客户数量:

SELECT
LastName AS "Value",
COUNT(*) AS "Count"
FROM Customers
GROUP BY
LastName;

同一州的客户

类似地,可以使用如下查询检索处于相同状态的客户:

SELECT
S.Name AS "Value",
COUNT(*) AS "Count"
FROM Customers AS C
INNER JOIN CustomerAddresses AS CA ON C.Id = CA.CustomerId
INNER JOIN Addresses AS A ON CA.AddressId = A.Id
INNER JOIN States AS S ON A.State = S.Id
GROUP BY
A.State;

获取您想要的格式

您想要的格式是这两个查询的聚合。您希望两者都作为单个结果集返回。因此,让我们为返回的表制定一个模式:

  • ResultType - 这将包含与结果类型相对应的值。即“状态”
  • Value - 这将保存聚合列的值。即“佛罗里达”
  • Count - 这将保存与聚合列匹配的记录总数。

现在我们有了一种格式,让我们创建一个查询,使用上面的两个查询,并将它们放入这种格式中。

首先,我为上述每个查询添加一个新字段:ResultType

例如:

"LastName" AS "ResultType"

现在,我使用 UNION ALL 语句将我的查询组合成一个查询:

SELECT * FROM (

/* LastName query */
SELECT
"LastName" AS "ResultType",
LastName AS "Value",
COUNT(*) AS "Count"
FROM Customers
GROUP BY
LastName

UNION ALL

/* States query */
SELECT
"State" AS "ResultType",
S.Name AS "Value",
COUNT(*) AS "Count"
FROM Customers AS C
INNER JOIN CustomerAddresses AS CA ON C.Id = CA.CustomerId
INNER JOIN Addresses AS A ON CA.AddressId = A.Id
INNER JOIN States AS S ON A.State = S.Id
GROUP BY
A.State
) AS A

在我上面的 SqlFiddle 中,这会产生如下输出:

RESULTTYPE   VALUE    COUNT
=================================
LastName Jetson 1
LastName Johnson 2
LastName Milton 1
State Florida 2
State Georgia 1
State Utah 1

如您所见,这可能会变得相当复杂,因此您可能会考虑将其放入 View 中。然后,您将能够查询您的 View ,就好像它是上面的表(ResultType、Value 和 Count)一样。这也将允许您对其进行过滤。

关于php - 如何从一个 MySQL 查询生成多个报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441007/

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