1
月にデータベース内のClientCostToDate
行(タイプはDECIMAL
)をすべて追加し、JSONとしてデータを返すMySQLクエリがあります。MySQLデータベースの列の値をカウントするクエリ
私のPHPスクリプトは次のとおりです。ここで
//the sql query to be executed
$estimates_query = "SELECT DATE_FORMAT(CreatedDate, '%M %Y') AS CreatedMonth,
SUM(ClientCostToDate) AS ClientCostsTotal,
EXTRACT(YEAR_MONTH FROM CreatedDate) AS CreatedYearMonth
FROM Estimates
WHERE CreatedDate IS NOT NULL
AND EXTRACT(YEAR_MONTH FROM CreatedDate) >= EXTRACT(YEAR_MONTH FROM CURDATE())-100
GROUP BY DATE_FORMAT(CreatedDate, '%M')
ORDER BY CreatedYearMonth";
//storing the result of the executed query
$result = $conn->query($estimates_query);
//initialize the array to store the processed data
$estimatesJsonArray = array();
//check if there is any data returned by the sql query
if ($result->num_rows > 0) {
//converting the results into an associative array
while ($row = $result->fetch_assoc()) {
$jsonArrayItem = array();
$jsonArrayItem['date'] = $row['CreatedMonth'];
$jsonArrayItem['clientCostsTotal'] = $row['ClientCostsTotal'];
//append the above created object into the main array
array_push($estimatesJsonArray, $jsonArrayItem);
}
}
//close the connection to the database
$conn->close();
//set the response content type as json
header('Content-type: application/json');
//output the return value of json encode using the echo function
echo json_encode($estimatesJsonArray, JSON_PRETTY_PRINT);
はJSONです:
[
{
"date": "February 2016",
"clientCostsTotal": "21211.25"
},
{
"date": "March 2016",
"clientCostsTotal": "206996.25"
},
{
"date": "April 2016",
"clientCostsTotal": "74667.50"
},
{
"date": "May 2016",
"clientCostsTotal": "61128.75"
},
{
"date": "June 2016",
"clientCostsTotal": "267740.50"
},
{
"date": "July 2016",
"clientCostsTotal": "200946.75"
},
{
"date": "August 2016",
"clientCostsTotal": "0.00"
}
]
MySQLデータベースStatus
(VARCHAR
タイプ)内の別の列があります。これは、以下の値で構成されます。新規見積もり、承認済み、請求済、請求待ち、キャンセル、クライアントあり、原価提出。
SUM(ClientCostToDate) AS ClientCostsTotal
を構成する行のすべてのステータスを取得するMySQLクエリを作成する必要があります。その後、1か月ごとにステータスの新しいタイプ(新規見積もり、承認済み、請求済み、請求待ち、キャンセル済み、クライアントあり、原価提出済み)の数をカウントする必要があります。これを達成する最良の方法は何ですか?
ありがとうございました。それはまさに私が好きなように動作します。すべての 'Status'値の総数を取得するには、' SUM(num_NewEstimate、num_Approved、...) 'を実行しますか?それがパズルのその部分を達成する最善の方法ですか? – Liz
@LizBanach:MySQLでは、同じクエリのSELECTリスト内で列エイリアスを参照することはできません。この問合せをインライン・ビュー(必要なパフォーマンス・ペナルティを伴う)にして、外部問合せの列名を参照できます。または、1)同じ式を繰り返します(個々の数を取得する)が、コンマ区切りの代わりに加算演算子(+)を組み合わせる。または2)すべての値 'SUM(status IN( 'New Estimate'、 'Approved'、...))AS num_in_status_list'をテストする別の式を実行します。 – spencer7593
ガイダンス@ spencer7593ありがとうございました – Liz