2016-10-26 4 views
0

Мне нужно вытащить данные столбца из двух таблиц, выполнить вычисления данных с результатом, сохраненным как псевдоним, а затем суммировать эти результаты в другом псевдониме 'для отображения в php-таблице. Я пытаюсь достичь этого, создав производную таблицу в моей инструкции SELECT, но она не работает. Я не получаю никаких ошибок, но в моей таблице отображаются заголовки столбцов.Вытяните столбцы из производной таблицы и суммируйте их в одной инструкции MySQL 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 код, в котором построена таблица:

$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'] ."&nbsp;&nbsp;". "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>"; 

Вся помощь ценится.

Спасибо,

+1

Когда вы выполняете первый запрос, что такое ошибка? – krasipenkov

+1

Хорошее горе. Не храните '$'. И см. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql- запрос – Strawberry

+0

lol My bad ... Spelling error. Когда я звоню в SUM (x.sgtotalquantity), я записал его как x.sgtotalqauntity. После исправления ошибки моя таблица отображает данные, но ее все еще значительно отключается. Это все равно, как будто инструкция SELECT не может найти каждую строку счета, чтобы суммировать эти значения из производной таблицы ... – rdimouro

ответ

0

Я имел Опечатку и вопрос форматирования. Форматируя окончательные данные вместо форматирования внутри встроенного оператора 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"; 

Спасибо !!!