gpt4 book ai didi

php 从五个表中选择查询,每个表的第一个字段中都有 client_id

转载 作者:行者123 更新时间:2023-11-29 13:31:52 27 4
gpt4 key购买 nike

我有五张 table ;客户、第一部分、第二部分、第三部分、第四部分。输入数据后,每个表都会自动在第一个字段中填充 client_id。我想检索网站上特定客户端的每个表(第一节、第二节、第三节、第四节)的百分比字段。我的查询有效并检索每个表的百分比字段,但不幸的是它不断返回数据库中第一个客户端的百分比字段,例如 client_id 1。如何更改下面的查询,以便获得当前客户返回的百分比?非常感谢你的帮助。罗西

$query = "SELECT a.client_id,
a.percent,
b.percent,
c. percent,
d. percent
FROM sectionone a,
sectiontwo b,
sectionthree c,
sectionfour d
WHERE a.client_id = b.client_id
AND b.client_id = c.client_id
AND c.client_id = d.client_id";

最佳答案

从您的问题中很难判断您的 sectiononesectiontwo 等表格是否为每个客户端恰好只有一行。

可能的情况是这些。

  1. clientsectionone 等之间精确的一对一关系
  2. 一对一的零或一关系
  3. 一对零一或多对关系

从你的问题的字里行间看出,在我看来,你认为自己遇到了第一种情况,但实际上你遇到了第三种情况。也就是说,对于特定客户端 ID,您可能有多个 sectionthird 行。

您希望在结果集中为每个客户显示一行,如下所示。

  clientid      one      two     three    four
123 45 55 20 56

对于这样的查询来说,清楚地可视化您想要的结果集非常重要。但你知道这一点。

所以,我们开始吧。我们需要对 sectionX 表进行一一汇总,因为我们必须创造一种错觉,即每个客户端只有一行,即使它们没有。

    SELECT client_id, AVG(percent) AS percent
FROM sectionone
GROUP BY client_id

相同的查询适用于所有四个 sectionX 表。我们将使用其中四个汇总查询作为主查询其余部分的虚拟表

接下来,我们必须将这四个汇总查询联接到 client 表中。我们应该使用 LEFT JOIN 命令来涵盖 sectionX 表可能包含特定客户端的零行的情况。

   SELECT z.client_id, a.percent AS one,   b.percent AS two, 
c.percent AS three, d.percent AS four
FROM client as z
LEFT JOIN (
SELECT client_id, AVG(percent) AS percent
FROM sectionone
GROUP BY client_id
) AS a ON z.client_id = a.client_id
LEFT JOIN (
SELECT client_id, AVG(percent) AS percent
FROM sectiontwo
GROUP BY client_id
) AS b ON z.client_id = b.client_id
LEFT JOIN (
SELECT client_id, AVG(percent) AS percent
FROM sectionthree
GROUP BY client_id
) AS c ON z.client_id = c.client_id
LEFT JOIN (
SELECT client_id, AVG(percent) AS percent
FROM sectionfour
GROUP BY client_id
) AS d ON z.client_id = d.client_id

最后,如果您只想要一个 client_id,您应该以

结束查询
     WHERE z.client_id = whatever

如果客户端的 sectionX 表中有不止一行,则此方法会取它们的平均值。如果您需要其他内容,例如 MAX、MIN 等,您可以在查询中使用它。

这看起来很复杂,但实际上很简单,如果你可以将五路表 LEFT JOIN 称为简单的:-)。它适用于本答案开头提到的所有三种情况。

此外,MySQL(和其他 SQL 系统)在优化此类查询方面做得非常好,因为它很常见。

关于php 从五个表中选择查询,每个表的第一个字段中都有 client_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334062/

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