Je lance la requête suivante et la sortie dans MS SQL2008 est ci-dessous.PHP + formatage JSON
Requête:
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
Sortie:
+---------------------------------------------------------------------+
| D | OWNER1 | OWNER2 | OWNER3 |
+---------------------------------------------------------------------+
| 2014-07-07 | 443 | 456 | 487 |
+---------------------------------------------------------------------+
| 2014-07-09 | 1024 | 2056 | 2076 |
+---------------------------------------------------------------------+
J'utilise le script PHP ci-dessous pour récupérer les données et encode à 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);
?>
Le résultat JSON ressemble à ceci:
[{"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}]
Cependant, je dois le JSON pour ressembler à ceci. Je ne sais pas où le type de fuseau horaire et le fuseau horaire proviennent de:
[{"d":"2014-07-07","OWNER1":443,"OWNER2":456,"OWNER3":487},{"d":"2014-07-09","OWNER1":1024,"OWNER2":2056,"OWNER3":2076}]
Est-il quelque chose de mal avec ma requête ou dans mon PHP?
Merci!
im utilisé pour mysql si cela peut se tromper, mais avec MySQL, vous avez seulement besoin d'une boucle avec le fetch_array() dans l'instruction while. – JStephen
Je pense que la boucle do {while} est inutile, aussi id initialise la variable $ json comme un tableau vide pour commencer. Mais je dirais que la requête ne vous donne pas ce que vous voulez aussi parce que ce "timezone_type": 3, "timezone": "Asia \/Brunei", que je vois vous savez déjà. – ArtisticPhoenix