Не в состоянии передать данные массива - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь создать массив в $data, но этого не происходит.Я использую этот код для составления дневного графика продаж.

$data = array();
for ($i = 0; $i <= 10; $i++) {
    $billdate = date('d-m-Y', strtotime("-$i day"));
    $sqlQuery = "select sum(amount),bill_date from msr_bills WHERE bill_date='$billdate' ";
    $result = mysqli_query($con, $sqlQuery);

    $fetchamount = mysqli_fetch_row($result);
    $sum = $fetchamount[0];

    $data = new \stdClass();
    $data->bill_date = $billdate;
    $data->amount = $sum;
    $report_JSON = json_encode($data);

    echo  $report_JSON.",";
}

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Вы можете объединить ваш цикл в один запрос, а затем выполнить итерацию по результатам:

$data = array();
$billdate = date('Y-m-d', strtotime('-10 day'));
$sqlQuery = "SELECT bill_date, SUM(amount) AS amount
             FROM msr_bills
             WHERE bill_date >= '$billdate'
             GROUP BY bill_date";
$result = mysqli_query($sqlQuery);
if ($result) {
    while ($row = mysqli_fetch_assoc($result)) {
        $data[] = (object)$row;
    }
    $report_JSON = json_encode($data);
    echo  $report_JSON;
}

Обратите внимание, что ваш формат даты не совместим с датами MySQL, которые хранятся в формате Y-m-d,и я изменил это в коде.Если ваш столбец bill_date на самом деле является текстовым полем, хранящимся в формате d-m-Y, вам нужно будет преобразовать его в запросе следующим образом:

$sqlQuery = "SELECT bill_date, SUM(amount) AS amount
             FROM msr_bills
             WHERE STR_TO_DATE(bill_date, '%d-%m-%Y') >= '$billdate'
             GROUP BY bill_date";

Обратите внимание, что вы можете фактически выполнить вычисление$billdate внутренний для вашего SQL-запроса с использованием арифметики даты:

$sqlQuery = "SELECT bill_date, SUM(amount) AS amount
             FROM msr_bills
             WHERE STR_TO_DATE(bill_date, '%d-%m-%Y') >= CURDATE() - INTERVAL 10 DAY
             GROUP BY bill_date";

И если вы работаете с MySQL 8.0+, вы можете выполнить всю операцию в MySQL:

$sqlQuery = "SELECT JSON_ARRAYAGG(data) AS data
             FROM (SELECT JSON_OBJECT('bill_date', bill_date, 'amount', SUM(amount)) AS data
                   FROM msr_bills
                   WHERE bill_date >= CURDATE() - INTERVAL 10 DAY
                   GROUP BY bill_date) d";
$result = mysqli_query($sqlQuery);
if ($result) {
    $row = mysqli_fetch_assoc($result);
    $report_JSON = $row['data'];
    echo $report_JSON;
}

Демо на dbfiddle

0 голосов
/ 28 сентября 2019

Поместите свое эхо вне петли.удалить код $report_JSON = json_encode($data);

$respnseArr = array();

{
.
.
.
  $respnseArr[] = $data;
}

echo json_encode($respnseArr);
...