2つのテーブルから列データを取り出し、その結果をエイリアスとして保存して計算結果を別のエイリアスに集計する必要がありますPHPのテーブルで。私は私のSELECTステートメント内に派生テーブルを作成することでこれを達成しようとしていますが、動作しません。エラーは発生しませんが、テーブルには列ヘッダーのみが表示されます。派生テーブルから列を引き出し、1つのMySQL SELECT文で合計する
CODE:
$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.idの代わりにinvoices.companyでグループ化しようとすると、私のテーブルは完成しますが、各社の行の値は非常に不正確です(sum()は正しくありません)。テーブルが構築されている
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'] ." ". "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>";
すべてのヘルプは高く評価されています。
ありがとう、
最初のクエリを実行すると、エラーは何ですか? – krasipenkov
良い悲しみ。 「$」は保管しないでください。 http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-を参照してください。クエリ – Strawberry
笑私の悪い...スペルミス。 SUM(x.sgtotalquantity)を呼び出すと、私はx.sgtotalqauntityという名前をつけました。エラーを修正すると、私のテーブルにはデータが表示されますが、それでもかなりの違いがあります。これは、SELECT文が派生テーブルからそれらの値を合計するためにすべての請求書行を見つけることができないかのようにまだです... – rdimouro