我發出以下查詢,MS SQL2008中的輸出如下。PHP + JSON格式化
查詢:
SELECT * FROM (
SELECT cast(convert(varchar(10), DATE_PULL) as DATE) as d,
[OWNER] as label,
sum(VM_COUNT) as value
FROM [VCENTER_INFO_HIST]
GROUP BY OWNER,
DATE_PULL)sub PIVOT (MAX(value) FOR label IN (OWNER1,OWNER2,OWNER3))pvt
輸出:
+---------------------------------------------------------------------+
| D | OWNER1 | OWNER2 | OWNER3 |
+---------------------------------------------------------------------+
| 2014-07-07 | 443 | 456 | 487 |
+---------------------------------------------------------------------+
| 2014-07-09 | 1024 | 2056 | 2076 |
+---------------------------------------------------------------------+
我使用下面的PHP腳本來獲取數據和編碼到JSON。
<?php
include("connect.php");
/* Set up and execute the query. */
$sql = "SELECT * FROM (SELECT cast(convert(varchar(10), DATE_PULL) as DATE) as d, [OWNER] as label, sum(VM_COUNT) as value FROM [VCENTER_INFO_HIST] GROUP BY OWNER, DATE_PULL)sub PIVOT (MAX(value) FOR label IN (OWNER1,OWNER2,OWNER3))pvt";
$stmt = sqlsrv_query($conn, $sql);
/* Process results */
do {
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$json[] = $row;
}
} while (sqlsrv_next_result($stmt));
/* Run the tabular results through json_encode() */
/* And ensure numbers don't get cast to trings */
echo json_encode($json);
/* Free statement and connection resources. */
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
產生的JSON看起來是這樣的:
[{"d":{"date":"2014-07-07 00:00:00","timezone_type":3,"timezone":"Asia\/Brunei"},"OWNER1":443,"OWNER2":456,"OWNER3":487},{"d":{"date":"2014-07-09 00:00:00","timezone_type":3,"timezone":"Asia\/Brunei"},"OWNER1":1024,"OWNER2":2056,"OWNER3":2076}]
不過,我需要的JSON看起來像這樣。我不確定時區類型和時區來自何處:
[{"d":"2014-07-07","OWNER1":443,"OWNER2":456,"OWNER3":487},{"d":"2014-07-09","OWNER1":1024,"OWNER2":2056,"OWNER3":2076}]
這是我的查詢或在我的PHP有問題嗎?
謝謝!
IM所以這可能是錯的,但使用MySQL,你只需要一個循環用while語句中的fetch_array()。 – JStephen
我認爲do {while}循環是不必要的,並且id將初始化$ json變量作爲一個空數組開始。但我想說,查詢並沒有給你你想要的,因爲這個「timezone_type」:3,「timezone」:「Asia \/Brunei」,我看你已經知道了。 – ArtisticPhoenix