簡體   English   中英

格式化MYSQL的PHP​​輸出以獲取morris.js圖表​​數據

[英]Format PHP output from MYSQL for morris.js chart data

我有以下查詢用於檢索我的MYSQL數據庫中的數據:

SELECT a.PARNT_CIVSTATUS,count(a.PARNT_CIVSTATUS) from tbl_parnt a left join tbl_intrvw b 
on a.QN_NUMBR=b.QN_NUMBR left join tbl_barangay c on b.ZONE_NUM=c.BRGY_ZONE_NUM 
group by a.PARNT_CIVSTATUS

這是phpmyadmin的輸出:

phpmyadmin輸出

這是在PHP中使用json_encode的輸出:

[
{"0":"L","PARNT_CIVSTATUS":"L","1":"14","count(a.PARNT_CIVSTATUS)":"14"},
{"0":"LSP","PARNT_CIVSTATUS":"LSP","1":"9","count(a.PARNT_CIVSTATUS)":"9"},
{"0":"M","PARNT_CIVSTATUS":"M","1":"4386","count(a.PARNT_CIVSTATUS)":"4386"},
{"0":"N","PARNT_CIVSTATUS":"N","1":"45","count(a.PARNT_CIVSTATUS)":"45"},
{"0":"NON","PARNT_CIVSTATUS":"NON","1":"1","count(a.PARNT_CIVSTATUS)":"1"},
{"0":"O","PARNT_CIVSTATUS":"O","1":"12","count(a.PARNT_CIVSTATUS)":"12"},
{"0":"S","PARNT_CIVSTATUS":"S","1":"681","count(a.PARNT_CIVSTATUS)":"681"},
{"0":"SGP","PARNT_CIVSTATUS":"SGP","1":"143","count(a.PARNT_CIVSTATUS)":"143"},
{"0":"SP","PARNT_CIVSTATUS":"SP","1":"148","count(a.PARNT_CIVSTATUS)":"148"},
{"0":"SPG","PARNT_CIVSTATUS":"SPG","1":"12","count(a.PARNT_CIVSTATUS)":"12"},
{"0":"W","PARNT_CIVSTATUS":"W","1":"239","count(a.PARNT_CIVSTATUS)":"239"},
{"0":"WGW","PARNT_CIVSTATUS":"WGW","1":"1","count(a.PARNT_CIVSTATUS)":"1"},
{"0":"WW","PARNT_CIVSTATUS":"WW","1":"2","count(a.PARNT_CIVSTATUS)":"2"}
]

我不知道如何格式化它:

{ y: 'L', a: 10 },
{ y: 'LSP', a: 75 },
{ y: 'M', a: 50 },
{ y: 'N', a: 75 },
{ y: 'SGP', a: 50 },
{ y: 'SP', a: 75 },
{ y: 'W', a: 57 }

用於morris.js條形圖數據。 如何以這種方式格式化?

這不僅需要對sql進行修改,而且很容易實現。 首先,使用AS關鍵字 ,可以為您引用的列創建別名:

SELECT a.PARNT_CIVSTATUS AS 'y', count(a.PARNT_CIVSTATUS) AS 'a' 
FROM tbl_parnt a
LEFT JOIN tbl_intrvw b ON a.QN_NUMBR=b.QN_NUMBR 
LEFT JOIN tbl_barangay c ON b.ZONE_NUM=c.BRGY_ZONE_NUM 
GROUP BY a.PARNT_CIVSTATUS

假設我做的正確,上面的代碼應該為您提供此輸出

但是,這仍然留在php方面。 鑒於您尚未發布php,我將以我所知道的兩種方式解決此問題; 不推薦使用的mysql_*函數和PDO:

首先, 不推薦使用的功能。 如果您正在使用這些,我強烈建議您不要這樣做,而應改為PDO或mysqli; 無論如何,要代碼!

$arr = array();
while ($row = mysql_fetch_assoc($result)) {
    $arr[] = $row;
}

上面使用了mysql_fetch_assoc()和該文檔頁面中隨附的示例。 假定它們類似於我提供的上述SQLFiddle演示,它將獲取結果的關聯數組,並將其推入現有數組中; 然后,當然可以在json_encode中使用此數組以產生所需的結果。

我講的第二種方法是PDO或php數據對象,這是我支持的方法。 我不會在這里進行完整的演示,因為這超出了此答案的范圍,但是將在PDO中復制以上代碼:

$arr = $stmt->fetchAll(PDO::FETCH_ASSOC);

在這里,我使用fetchAll()來獲取每一行,並使用常量PDO::FETCH_ASSOC來確保它僅獲取列名及其值。 否則,您將獲得以上的收益。

當然,有第三個選擇,甚至第四個選擇。 Mysqli,以及一些定制的數據庫抽象層。 我沒有這方面的經驗,因此除了php.net的mysqli快速入門指南之外 ,我將不提供任何示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM