Yura_Mart
@Yura_Mart

Как отобразить данные из файла json по определённому ключу в javascript?

Нужно с помощью ajax запроса вывести историю заказов одного пользователя.
Данные запрашиваются у php файла, там он выдаёт json файл с информацией о заказах.

Заказы записаны в бд таким образом:
order_id        user_id        prod_name        prod_qty        prod_price      total
   10                    1             Product1                2                   100            200
   10                    1             Product2                3                   50              150
   11                    1             Product3                1                   100            100
   11                    1             Product4                4                   50              200


Вот код js:
$('document').ready(function(){

    lengthofp = function(obj) {
        var size = 0;
        $.each(my_orders, function(i, elem) {
            size++;
        });
        return size;
    };

    $.ajax({
        type: "POST",
        url: "http://sait/history.php",
        data: "user_id="+localStorage.getItem("user_id"),
        success: function(msg){
            console.log(msg);
            my_orders = JSON.parse(msg);
            for(i =1;i <= lengthofp(my_orders); i++){
                $(".my_history").append("<li>" +
                                        "<div class='collapsible-header'>" +
                                        "<div class='order-no'>" +
                                        "<span class='block bold'>"+"Заказ №"+my_orders[i.toString()]["order_id"]+"</span>" +                      
                                        "</div>" +
                                        "</div>" +
                                        "</li>");
            }
        },
        error: function(){
            swal("Ошибка!","Проверьте Интернет-соединение и повторите попытку","error");
        }
    });
});


И php:
<?php

error_reporting(E_ALL);
session_start();

define("DBHOST", "localhost");    
define("DBUSER", "root");        
define("DBPASS", "");             
define("DB", "название");        

$connection = mysqli_connect(DBHOST, DBUSER, DBPASS, DB) or die("Нет соединения с БД");
mysqli_set_charset($connection, "utf8") or die("Не установлена кодировка соединения");

if (isset($_POST['user_id'])){
    $user_id = $_POST['user_id'];
    global $connection;
    $query = "SELECT order_id, prod_name, prod_qty, prod_price, total, delivery_date FROM orders WHERE user_id = '$user_id'";
    $res = mysqli_query($connection, $query);
    $i=1;
    $orders = array();
    while($row = mysqli_fetch_assoc($res)){
        $orders[$i]= $row;
        $i++;
    }
    echo json_encode($orders);
}

?>


Выводятся заказы таким образом:

Заказ №10
Заказ №10
Заказ №11
Заказ №11

А нужно сделать по order_id:

Заказ №10
Заказ №11

Я так понял что передавать нужно все данные в php в json файле, т.к. в дальнейшем нужно будет вывести все товары в каждом заказе, но вывести нужно в javascript по определённому ключу.
Подскажите, пожалуйста, как такое реализовать?
  • Вопрос задан
  • 417 просмотров
Решения вопроса 1
@magarif
Программист
Так как я не знаю, что должно быть в итоге, тут три варианта.

Либо группируем сразу выборку:
$query = "
SELECT
  order_id,
  SUM(total) as total
FROM orders
WHERE user_id = '$user_id'
GROUP BY order_id
;"


Либо группируем на сервере по id заказа:
$orders = [];
while($row = mysqli_fetch_assoc($res)) {
  $orderId = $row['order_id'];
  unset($row['order_id']);
  $orders[$orderId]['id'] = $orderId;
  $orders[$orderId]['products'][] = $row;
}


Либо тоже самое делаем на клиенте...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы