php - 查询数据并以 JSON 字符串形式返回

标签 php mysql json

我需要一些帮助来将数据从表中提取到 Json 中。 我需要查询数据,返回当年符合WHERE语句的所有记录,同时将结果按MONTH分组。

我的查询是:

$query_Promoter = "
SELECT COUNT(RecordID) AS Score4, FeedBackDate  
FROM ".$FeedBack." 
WHERE FeedBackDate >= DATE_SUB(NOW(),INTERVAL 1 YEAR)
    AND A = 4
    OR B = 4 
    OR C = 4 
    OR D = 4 
    OR E = 4 
    OR F = 4 
    OR G = 4 
    OR H = 4 
    OR L = 4
    OR M = 4 
    OR N = 4 
GROUP BY MONTH(FeedBackDate)";
$Promoter =$conn->query($query_Promoter);
$totalRows_Promoter  = mysqli_num_rows($Promoter);

然后我循环遍历结果,如下所示:

if($totalRows_Promoter > 0) {
    $rows_Promoter  = array();
    $rows_Promoter ['name'] = 'Promoters';
    while($row_Promoter  = mysqli_fetch_array($Promoter )) {
        $rows_Promoter['Month'][] = date("M", strtotime($row_Promoter['FeedBackDate']));
        $rows_Promoter['data'][] = $row_Promoter['Score4'];
    }
}

$result = array();

if($totalRows_Promoter > 0) {
    array_push($result,$rows_Promoter);
}


print json_encode($result, JSON_NUMERIC_CHECK);

// The resulting JSON is:

[{"name":"Promoters","Month":["Jan","Jan","Jan","Jan"],"data":[3,10,17,1]}]

我试图得到的结果是:

[{"name":"Promoters","Month":["Jan","Feb","May","Jun"],"data":[3,10,17,1]}]

任何人都可以看到我做错了什么,或者我是否以错误的方式处理这个问题。

非常感谢您抽出时间。

最佳答案

您可以在 SQL 语句中完成大部分工作。通过使用 GROUP_CONCAT 函数和 DATE_FORMAT 函数,您最终将得到一行,可以轻松地将其转换为 JSON 数组。 SQL 语句如下:

SELECT 
    'Promoters' as `name`,
    GROUP_CONCAT(DATE_FORMAT(`FeedBackDate`,'%b')) as `Month`,
    GROUP_CONCAT(COUNT(`RecordID`)) AS `data`
FROM $FeedBack
WHERE `FeedBackDate` >= DATE_SUB(NOW(),INTERVAL 1 YEAR)
    AND (A = 4
        OR B = 4 
        OR C = 4 
        OR D = 4 
        OR E = 4 
        OR F = 4 
        OR G = 4 
        OR H = 4 
        OR L = 4
        OR M = 4 
        OR N = 4)
ORDER BY DATE_FORMAT(`FeedBackDate`,'%b')

要从行创建数组,您需要使用 GROUP_CONCAT 拆分两列,因为它们将是逗号分隔的字符串。

if($totalRows_Promoter > 0) {
    $rows_Promoter  = array();
    $rows_Promoter['name'] = 'Promoters';
    //  Should only have one row in results
    $row_Promoter  = mysqli_fetch_array($Promoter );
    $rows_Promoter['Month'] = explode(',',$row_Promoter['Month']);
    $rows_Promoter['data'] = explode(',',$row_Promoter['data']);
}

$result = json_encode($result, JSON_NUMERIC_CHECK);

echo $result;

关于php - 查询数据并以 JSON 字符串形式返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44995772/

相关文章:

php - 如何解决ms-access到mysql数据传输中的阿拉伯编码问题?

php - mysql 和 php 中按日期范围分组

json - 在 swift 中从复杂的 JSON 中获取数据

c# - 如何读取json数据

php - Symfony Doctrine 中的 Createquery、左连接和内连接

php - 从 View 中的公用文件夹调用 CSS。拉维尔 5.3

c# - 检查结果是否来自 SQL 中的特定表

java - 如何使用 Horton 架构注册表修复 : "Unrecognized token ' Unrecognized': was expecting ('true' , 'false' 或 'null' )"

php - nginx 获取 url 的子域并分配文档根目录

javascript - 如何从 AJAX 调用中返回一个数组?