所有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
中的变量返回。
任何帮助将不胜感激。提前谢谢。
安迪
答案 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
但这种方式通常比我上面发布的方式慢