Мне нужно вывести данные столбца из двух таблиц, выполнить вычисления данных с результатом, сохраненным как псевдоним, а затем суммировать эти результаты в другом псевдониме для отображения в php-таблице. Я пытаюсь достичь этого, создав производную таблицу в моей инструкции SELECT, но она не работает. Я не получаю никаких ошибок, но в моей таблице отображаются заголовки столбцов.
КОД:
$sql = "SELECT x.company, x.stagestatus, x.shippeddate, SUM(x.totprice) as totalprice, SUM(x.sgtotquantity) as sgtotqty, SUM(x.sgtotalsqft) as sgtotsqft, SUM(x.avgsqftrev) as avgsqftrevenue, SUM(x.avgunitrev) as avgunitrevenue FROM (SELECT t1.company, t1.stagestatus, t1.shippeddate, t1.id, FORMAT(TRIM(LEADING '$' FROM t1.totalprice), 2) AS totprice, t2.invoiceid, SUM(t2.quantity) AS sgtotqauntity, FORMAT(SUM(t2.width * t2.height * t2.quantity ) /144, 2) AS sgtotalsqft, FORMAT((TRIM(LEADING '$' FROM t1.totalprice)/(SUM(t2.width * t2.height * t2.quantity ) /144)), 2) as avgsqftrev, FORMAT((TRIM(LEADING '$' FROM t1.totalprice) / SUM(t2.quantity)), 2) AS avgunitrev FROM invoices AS t1 INNER JOIN lineitems AS t2 ON t1.id = t2.invoiceid WHERE (t2.invoiceid = t1.id) GROUP BY t1.id) x WHERE x.stagestatus='Complete' GROUP BY x.company ASC";
Этот код ломается, но когда я использую меньшие части по отдельности, он работает нормально.
EX:
$sql="SELECT invoices.id, invoices.orderdate, invoices.stagestatus, FORMAT(TRIM(LEADING '$' FROM invoices.totalprice), 2) AS totalprice, clients.company, lineitems.invoiceid, SUM(lineitems.quantity) AS sgtotqty, FORMAT(SUM(lineitems.width * lineitems.height * lineitems.quantity ) /144, 2) AS sgtotsqft, FORMAT((TRIM(LEADING '$' FROM invoices.totalprice)/(SUM(lineitems.width * lineitems.height * lineitems.quantity ) /144)), 2) as avgsqftrevenue, FORMAT((TRIM(LEADING '$' FROM invoices.totalprice) / SUM(lineitems.quantity)), 2) AS avgunitrevenue FROM clients INNER JOIN invoices ON clients.id = invoices.clientid INNER JOIN lineitems ON invoices.id = lineitems.invoiceid WHERE (lineitems.invoiceid = invoices.id) AND invoices.orderdate BETWEEN '".$revenuefrom."' AND '".$revenueto."' AND invoices.stagestatus IN (". implode(',', array_map(function($item) {return '"' . $item . '"'; }, $revenue_check)) .") GROUP BY invoices.id DESC";
Этот код работает очень хорошо и группирует все данные с помощью invoices.id. Тем не менее, потребности проекта были скорректированы, и теперь все должно группироваться посредством invoices.company. Когда я просто пытаюсь сгруппировать по invoices.company, а не invoices.id, моя таблица завершается, но значения для каждой строки компании очень неточны (это не сумма () справа).
PHP CODE, где построена таблица:
$result = $conn->query($sql); echo "<table id='revenueReportA' align='center' class='report_DT'> <thead> <tr> <th>Customer</th> <th>Total Revenue</th> <th>Total SQ FT</th> <th>AVG Revenue Per SQ FT</th> <th>Total Number of Units</th> <th>AVG Revenue Per Unit</th> </tr> </head>"; if ($result = $conn->query($sql)) { // fetch associative array while ($row = $result->fetch_assoc()) { echo "<tbody>"; echo "<tr>"; echo "<td>" . $row['company'] . "</td>"; echo "<td>" ."$". $row['totalprice'] . "</td>"; echo "<td>" . $row['sgtotsqft'] ." ". "ft<sup>2</sup>". "</td>"; echo "<td>" ."$". $row['avgsqftrevenue'] . "</td>"; echo "<td>" . $row['sgtotqty'] . "</td>"; echo "<td>" ."$". $row['avgunitrevenue'] . "</td>"; echo "</tr>"; echo "</tbody>"; } echo "</table>"; echo "<BR>";
Вся помощь приветствуется.
Спасибо,
У меня была орфографическая ошибка и проблема форматирования. Форматируя окончательные данные вместо форматирования внутри встроенного оператора SELECT, мои данные таблицы были точными.
Успешный КОД:
$sql = "SELECT x.company, x.stagestatus, x.shippeddate, FORMAT(SUM(x.totprice), 2) as totalprice, FORMAT(SUM(x.sgtotquantity), 2) as sgtotqty, FORMAT(SUM(x.sgtotalsqft), 2) as sgtotsqft, FORMAT(SUM(x.avgsqftrev), 2) as avgsqftrevenue, FORMAT(SUM(x.avgunitrev), 2) as avgunitrevenue FROM (SELECT t1.company, t1.stagestatus, t1.shippeddate, t1.id, TRIM(LEADING '$' FROM t1.totalprice) AS totprice, t2.invoiceid, SUM(t2.quantity) AS sgtotquantity, SUM(t2.width * t2.height * t2.quantity ) /144 AS sgtotalsqft, (TRIM(LEADING '$' FROM t1.totalprice)/(SUM(t2.width * t2.height * t2.quantity ) /144)) as avgsqftrev, (TRIM(LEADING '$' FROM t1.totalprice) / SUM(t2.quantity)) AS avgunitrev FROM invoices AS t1 INNER JOIN lineitems AS t2 ON t1.id = t2.invoiceid WHERE (t2.invoiceid = t1.id) GROUP BY t1.id) x WHERE x.stagestatus='Complete' GROUP BY x.company ASC";
Спасибо!!!