【发布时间】:2014-10-09 10:19:38
【问题描述】:
我有一个关于从两天前获取制造数据的问题。我的代码有效,但我认为我的实现效率低下。我有的是这个,
// YESTERDAYS FABRICATION
$yesterdaySql = "SELECT SUM(CURRENT_WEIGHT) AS TOTALYESTERDAYWEIGHT FROM FABRICATION_HIST
WHERE TO_CHAR (FAB_ENTRY_DATE,'MM/DD/YYYY') = TO_CHAR(SYSDATE - 1, 'MM/DD/YYYY')
AND PROJECT_NAME = :projName";
$yesterdayParse = oci_parse($conn, $yesterdaySql);
oci_bind_by_name($yesterdayParse, ":projName", $_SESSION['cd-dropdown']);
oci_define_by_name($yesterdayParse, "TOTALYESTERDAYWEIGHT", $sumWeightYesterday);
oci_execute($yesterdayParse);
// TWO DAYS AGO FABRICATION
$twoDaysSql = "SELECT SUM(CURRENT_WEIGHT) AS TOTALTWODAYSAGOWEIGHT FROM FABRICATION_HIST
WHERE TO_CHAR (FAB_ENTRY_DATE,'MM/DD/YYYY') = TO_CHAR(SYSDATE - 2, 'MM/DD/YYYY')
AND PROJECT_NAME = :projName";
$twoDaysParse = oci_parse($conn, $twoDaysSql);
oci_bind_by_name($twoDaysParse, ":projName", $_SESSION['cd-dropdown']);
oci_define_by_name($twoDaysParse, "TOTALTWODAYSAGOWEIGHT", $sumWeightTwoDays);
oci_execute($twoDaysParse);
我知道这是非常低效的。任何人都可以建议我,以便我可以在一个查询中获取两天的查询?
提前致谢
【问题讨论】:
-
将 PHP 的时间限制作为查询参数传入,然后将
FAB_ENTRY_DATE与这些参数进行比较。你也只需要一个参数化查询。 -
如果有性能问题,很可能是在数据库本身。一个查询而不是两个在这里不会有太大影响(在我看来)。您最好要求调整数据库查询本身。为此,我建议您在此处发布查询的执行计划。