Php 我想从多个表中选择所有指定的数据,但它只选择一个数据
我编写了一个SQL查询,通过该查询,我希望选择多个表中指定的所有相关数据,但当我运行查询时,它只检索单个数据,但我希望选择所有数据。我的问题是:Php 我想从多个表中选择所有指定的数据,但它只选择一个数据,php,sql,Php,Sql,我编写了一个SQL查询,通过该查询,我希望选择多个表中指定的所有相关数据,但当我运行查询时,它只检索单个数据,但我希望选择所有数据。我的问题是: $mysqli->query("SELECT projectDescription, location,budget,date, SUM(ebudget) as expense_budget, SUM(totalAmount) as overtime_budget, SUM(totalPrice) as materia
$mysqli->query("SELECT projectDescription, location,budget,date,
SUM(ebudget) as expense_budget, SUM(totalAmount) as overtime_budget,
SUM(totalPrice) as material_budget FROM projecttable, expensestable,
overtimetable,dailyworkusage WHERE
expensestable.projectID=projecttable.projectID AND
overtimetable.projectID=projecttable.projectID AND
dailyworkusage.projectID=projecttable.projectID") or die($mysqli-
>error());
这是因为您缺少一个
groupby
子句(在MySQL的非古代版本中,您可能会遇到语法错误)。在查询末尾添加以下内容:
GROUP BY projectDescription, location, budget, date
SELECT
projectDescription,
location,
budget,
date,
SUM(ebudget) as expense_budget,
SUM(totalAmount) as overtime_budget,
SUM(totalPrice) as material_budget
FROM projecttable p
INNER JOIN expensestable e ON e.projectID = p.projectID
INNER JOIN overtimetable o ON o.projectID = p.projectID
INNER JOIN dailyworkusage d ON d.projectID = p.projectID
GROUP BY
projectDescription,
location,
budget,
date
此外,您确实希望使用显式联接而不是老式的隐式联接。为表名使用别名也是一种很好的做法。以下是您的查询的更新版本:
GROUP BY projectDescription, location, budget, date
SELECT
projectDescription,
location,
budget,
date,
SUM(ebudget) as expense_budget,
SUM(totalAmount) as overtime_budget,
SUM(totalPrice) as material_budget
FROM projecttable p
INNER JOIN expensestable e ON e.projectID = p.projectID
INNER JOIN overtimetable o ON o.projectID = p.projectID
INNER JOIN dailyworkusage d ON d.projectID = p.projectID
GROUP BY
projectDescription,
location,
budget,
date
请将相关的表前缀添加到所有这些列中(如果没有看到您实际的表结构,就不能说您没有显示)。学习使用正确、明确、标准的
JOIN
语法。正如GMB提到的,您可能需要分组。另请参见此以获取可能的解释。您还需要包含mysql标记。使用die(mysqli_error($conn))是一个非常糟糕的主意
在您的代码中,因为它可能会泄漏敏感信息。更多解释请参见本文:现在它将SUM的每一列乘以4@Xeroseven:此查询为项目描述、位置、预算、日期的每个组合返回一条记录。如果需要不同的基数,可以相应地更改SELECT
和groupby
子句中的列。