组合多个查询以获得单个总和答案

时间:2016-05-09 21:13:39

标签: php arrays sql-server

所有SQL / PHP的新东西 - 涉及基本查询并将它们输出到以前的PHP,但现在尝试更复杂的东西,并希望有人可以帮助解决这个问题,因为我一直试图解决这个问题运气到目前为止:

我有2个MS SQL表:

表1 - 错误

faultid ... requestnumber
1 ...........        6
2 ...........        5
3 ...........        6

表2 - 行动

faultid ....who .....     when......   timetaken
1..........       John.......    Mon.........     1.00
2..........       Peter......   Mon..........     2.00
3..........       Luke.......    Tues........    1.00
2..........       John.......    Tues........     0.5
1..........       Mike.......    Mon.........     0.75

我想要实现的是创建一个我可以在前端基于php的网页中使用的变量,该变量获得表2中的timetaken列的总和,其中表1中的请求数等于特定数字(即6)

我猜它会从以下内容开始:

$sql1 = "select faultid FROM Faults WHERE requestnumber = '6'";
    $sqlresult = sqlsrv_query($conn, $sql1);
    while ($row = sqlsrv_fetch_array($sqlresult)){
}

之后我有点卡住了。如何从中获取每个结果,然后运行另一个查询以获得表2 timetaken列的总和,仅用于相应的faultid?我想冒险使用foreach但不确定语法(或者即使我猜对了)。

因此,在此示例中,我会将2.75的结果作为PHP中的变量返回。

任何帮助将不胜感激。提前谢谢。

安迪

1 个答案:

答案 0 :(得分:0)

最好只使用一个SQL语句

class

将此作为预准备语句使用,并在执行此语句时将您的requestnumber(6或其他)作为参数传递。

要获得所有或多个总和,您可以使用group by(可能与WHERE结合使用):

$sql = 'SELECT SUM(t2.timetaken)';
$sql .= ' FROM Faults t1 INNER JOIN actions t2 ON (t2.faultid = t1.faultid)';
$sql .= ' WHERE t1.requestnumber = ?';

修改
根据您自己的注释,您可以使用带子查询的SELECT,但使用IN,而不是=。使用'='时,子查询必须只返回一行。

SELECT t1.requestnumber, SUM(t2.timetaken)
 FROM Faults t1
 INNER JOIN actions t2 ON (t2.faultid = t1.faultid)
 GROUP BY t1.requestnumber

但这种方式通常比我上面发布的方式慢