我正在尝试创建报告,我需要根据另一列中的值将值合并为小计。我的问题是,我不能在MySQL中使用SUM命令,因为我没有处理表的MySQL列名。
我有一组日期范围,我需要根据日期范围将总数加起来。我创建日期范围作为变量,所以我不知道如何使用PHP或MySQL来总结。 (我想使用像jQuery这样的东西,如果能够工作的话。)
“活动代码”列中的值位于数据库本身,但监控期间来自此查询的“计划”表中的Approval_Date字段:
$query = "SELECT * from Plans
Inner JOIN Payroll ON Payroll.Client_ID = Plans.Client_ID";
然后这个特别丑陋的代码创建了表:
$res = mysqli_query($con, $query);
echo "<div id='payroll'>";
echo "<table class='sortable' style='position:absolute; top: 150px; left: 15px; white-space: nowrap;'>";
echo "<th>Activity Date</th><th>Last Name</th><th>First Name</th><th>PT Last Name</th><th>PT First Name</th><th>Activity Code</th><th class='sorttable_numeric'>Monitoring Period</th><th>Hours</th><th>Rate</th><th>Hourly Pay</th><th>Notes</th>";
while ($row = mysqli_fetch_assoc($res)) {
foreach($row as $key => $val) {
$daterange = $row['Approval_Date'];
$m30 = date('m/d/y',strtotime('+ 30 days', strtotime($daterange)));
$m60 = date('m/d/y',strtotime('+ 60 days', strtotime($daterange)));
$m90 = date('m/d/y',strtotime('+ 90 days', strtotime($daterange)));
$m120 = date('m/d/y',strtotime('+ 120 days', strtotime($daterange)));
$m150 = date('m/d/y',strtotime('+ 150 days', strtotime($daterange)));
$m180 = date('m/d/y',strtotime('+ 190 days', strtotime($daterange)));
$m210 = date('m/d/y',strtotime('+ 210 days', strtotime($daterange)));
$m240 = date('m/d/y',strtotime('+ 240 days', strtotime($daterange)));
$m270 = date('m/d/y',strtotime('+ 270 days', strtotime($daterange)));
$m300 = date('m/d/y',strtotime('+ 300 days', strtotime($daterange)));
$m330 = date('m/d/y',strtotime('+ 330 days', strtotime($daterange)));
$m360 = date('m/d/y',strtotime('+ 360 days', strtotime($daterange)));
$Hourly_Pay = round($row['Pay_Rate'] * $row['Hours'],2);
asort($row);
$time = strtotime($val);
$newformat = date('Y-m-d',$time);
$myformat = date('Y-m-d', strtotime($row['Date']));
if ( $time > strtotime("01/01/1969") AND $key == "Date" AND $myformat = $newformat) {
echo "<tr><td>" . $row['Date']; echo "</td><td>" . $row['SC_LName'] . "</td><td>" . $row['SC_FName'] . "</td><td>" . $row['PT_Last_Name'] . "</td><td>" . $row['PT_First_Name'] . "</td><td>" . $row['Activity_Type'] . "</td><td>";
if ($row['Activity_Type'] <> "New Plan" AND $row['Activity_Type'] <> "DDD Initial Training" AND $row['Activity_Type'] <> "DSA Initial Training" AND $row['Activity_Type'] <> "CDS Videos") {
if (strtotime($row['Date']) <= strtotime($m30)) {echo date('m/d/y',strtotime('+ 0 days', strtotime($daterange))) . " - " . $m30;};
if (strtotime($row['Date']) > strtotime($m30) AND strtotime($row['Date']) < strtotime($m60)) {echo date('m/d/y',strtotime('+ 60 days', strtotime($daterange))) . " - " . $m60 ;};
if (strtotime($row['Date']) >= strtotime($m60) AND strtotime($row['Date']) < strtotime($m90)) {echo date('m/d/y',strtotime('+ 60 days', strtotime($daterange))) . " - " . $m90 ;};
if (strtotime($row['Date']) >= strtotime($m90) AND strtotime($row['Date']) < strtotime($m120)) {echo date('m/d/y',strtotime('+ 90 days', strtotime($daterange))) . " - " . $m120 ;};
if (strtotime($row['Date']) >= strtotime($m120) AND strtotime($row['Date']) < strtotime($m150)) {echo date('m/d/y',strtotime('+ 120 days', strtotime($daterange))) . " - " . $m150 ;};
if (strtotime($row['Date']) >= strtotime($m150) AND strtotime($row['Date']) < strtotime($m180)) {echo date('m/d/y',strtotime('+ 150 days', strtotime($daterange))) . " - " . $m180 ;};
if (strtotime($row['Date']) >= strtotime($m180) AND strtotime($row['Date']) < strtotime($m210)) {echo date('m/d/y',strtotime('+ 180 days', strtotime($daterange))) . " - " . $m210 ;};
if (strtotime($row['Date']) >= strtotime($m210) AND strtotime($row['Date']) < strtotime($m240)) {echo date('m/d/y',strtotime('+ 210 days', strtotime($daterange))) . " - " . $m240 ;};
if (strtotime($row['Date']) >= strtotime($m240) AND strtotime($row['Date']) < strtotime($m270)) {echo date('m/d/y',strtotime('+ 240 days', strtotime($daterange))) . " - " . $m270 ;};
if (strtotime($row['Date']) > strtotime($m270) AND strtotime($row['Date']) < strtotime($m300)) {echo date('m/d/y',strtotime('+ 270 days', strtotime($daterange))) . " - " . $m300;};
if (strtotime($row['Date']) > strtotime($m300) AND strtotime($row['Date']) < strtotime($m330)) {echo date('m/d/y',strtotime('+ 300 days', strtotime($daterange))) . " - " . $m330;};
if (strtotime($row['Date']) > strtotime($m330) AND strtotime($row['Date']) < strtotime($m360)) {echo date('m/d/y',strtotime('+ 330 days', strtotime($daterange))) . " - " . $m360 ;}
};
echo "<td>" . $row['Hours'] . "</td><td>" . $row['Pay_Rate'] . "</td><td>" . $Hourly_Pay . "</td><td>" . $row['Notes'] . "</td></tr>";
}
}
}
echo "</table>";
由于您可能或可能无法从混乱中判断出来,它会根据行的Approval_Date创建一个监视期间列,其中包含一系列日期范围。
我的困境是我无法弄清楚如何在监控期间获得一笔款项。由于它是动态创建的,并且该列不是数据库的一部分,因此我无法从MySQL获得SUM。
任何和所有建议将不胜感激。如果您需要其他信息,请与我们联系。如果有一个jQuery或Javascript方式来解决这个问题,那我也很好。 :)
谢谢!
ETA:我刚想到,不是立即打印出表中的数据,也许我应该将数据存储在MySQL表中。那样的话,我可以做所有的操作,如果我愿意,可以在完成后放下桌子。听起来有可能吗?