Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我想从多个表中选择所有指定的数据,但它只选择一个数据_Php_Sql - Fatal编程技术网

Php 我想从多个表中选择所有指定的数据,但它只选择一个数据

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

我编写了一个SQL查询,通过该查询,我希望选择多个表中指定的所有相关数据,但当我运行查询时,它只检索单个数据,但我希望选择所有数据。我的问题是:

    $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
子句中的列。