• Проблемы с циклом?

    @holllop Автор вопроса
    Kentavr16, согласен моя ошибка
    Написано
  • Проблемы с циклом?

    @holllop Автор вопроса
    Михаил Р., нет тут я вынужден не согласится, если сделать как вы"хотите" и написать "<" то условие выполниться сразу, его длина динамическая как и сам массив expenses_without_first.length, его минимальная длина 8, а максимальная регулируется пользователем(точнее количеством напечатанного) и если массив длиной 8, то условие сразу выполнится, или я уже устал и мне надо подумать об этом больше завтра )
    Написано
  • Проблемы с циклом?

    @holllop Автор вопроса
    Михаил Р., какая-то ошибка получается из области "детские" вместо "==" написал "="
    Написано
  • Проблемы с циклом?

    @holllop Автор вопроса
    то есть в условии цикла не может быть равно я правильно понял ?
    Написано
  • Как составить сложный агрегированный запрос?

    @holllop Автор вопроса
    Voland69,я нашёл ответ сам. Я не просто задаю вопросы не осознано, я сам тружусь над их решением, не жду "маны небесной" или пока кто-то решит.
    Правильный sql запрос для того, что я хотел выглядит так
    SELECT 
          o.order_id, 
          d.name AS dname, 
          c.customer, 
          o.date, 
          array_agg(
            json_build_object(
              'id_works', w.id_work::text, 
              'name_object', w.name_object, 
              'work_items', subq.work_items
            )
          ) AS works_info
          FROM "order" o
          JOIN works w ON o.order_id = w.id_order
          JOIN departaments d ON o.departament_id = d.departament_id
          JOIN customers c ON o.customer_id = c.customer_id
          LEFT JOIN (
            SELECT
                w.id_work,
                w.name_object,
                json_agg(json_build_object(
                    'n_works', e.n_work::text,
                    'type_works', tw.type_work,
                    'printers', pr.printer,
                    'materials', ma.material,
                    'performers', pe.performer,
                    'formats', f.format,
                    'n_sheets', e.n_sheets::text
                )) AS work_items
            FROM works w
            LEFT JOIN expenses e ON w.id_work = e.n_plan
            LEFT JOIN type_work tw ON e.type_work_id = tw.type_work_id
            LEFT JOIN printer pr ON e.printer_id = pr.printer_id
            LEFT JOIN material ma ON e.material_id = ma.material_id
            LEFT JOIN performers pe ON e.performer_id = pe.performer_id
            LEFT JOIN format f ON e.format_id = f.format_id
            GROUP BY w.id_work, w.name_object
          ) AS subq ON w.id_work = subq.id_work
        GROUP BY o.order_id, d.name, c.customer, o.date

    получаю я из него следующее
    {
    order_id: 13,
    dname: "ПЭО",
    customer: "Лимановский Р.А.",
    date: "2010-01-14T21:00:00.000Z",
    works_info: [
    {
    id_works: "30",
    name_object: "какой-то",
    work_items: [
    {
    n_works: "31",
    type_works: "Цветная печать",
    printers: "HP DesignJet 500",
    materials: "914*50m",
    performers: "Хакимов Р.С.",
    formats: "A1",
    n_sheets: "0.0"
    }
    ]
    },
    {
    id_works: "34",
    name_object: "какой-то",
    work_items: [
    {
    n_works: "35",
    type_works: "Ч/б печать",
    printers: "Kyosera 3510i",
    materials: "A3",
    performers: "Буракова О.Ю.",
    formats: "A3",
    n_sheets: "0.0"
    },
    {
    n_works: "36",
    type_works: "Цветная печать",
    printers: "HP DesignJet 500",
    materials: "914*50m",
    performers: "Хакимов Р.С.",
    formats: "A1",
    n_sheets: "0.0"
    },
    ]
    },
    {
    id_works: "32",
    name_object: "какой-то",
    work_items: [
    {
    n_works: "33",
    type_works: "Цветная печать",
    printers: "HP DesignJet 500",
    materials: "914*50m",
    performers: "Хакимов Р.С.",
    formats: "A1",
    n_sheets: "0.0"
    }
    ]
    }
    ]
    }

    решил показать только один из элементов массива который выводится, чтобы не копировать всё
    Написано
  • Как составить сложный агрегированный запрос?

    @holllop Автор вопроса
    Voland69, да я это понимаю, что оно опирается на количество уникальных значений w.id_work. Вариант действительно не плохой
    GROUP BY w.id_work и 5 в 3 запихивать на стороне клиента базы
    попробую скорее всего это.
    исключить w.id_work из запроса
    для меня это не вариант, т.к. данные мне оттуда всё таки нужны.
    хамить на уточняющие вопросы - харам.
    был бы уточняющий, я бы ответил, и даже расписал, что конкретно не понятно.
    и вы хотите, чтобы мы подсказали вам, чего вы хотите от этих двух столбцов?
    по моему это не очень уточняющий вопрос и выглядит как "И чё хочет эта челядь ?"
    Для более конкретного ответа опишите логику, в каком виде вы хотите получить несколько w.id_work у одного o.order_id в выборке.
    ну не знаю поймёте ли вы, если скажу что хочу получить из запроса тройной массив
    Написано
  • Как составить сложный агрегированный запрос?

    @holllop Автор вопроса
    Adamos, конечно братка, ты ж мой учитель, гуру и проводник в мире программирования, от куда я могу знать больше, если у меня такой учитель ?
    Написано
  • Как составить сложный агрегированный запрос?

    @holllop Автор вопроса
    Adamos,
    увы, хамить мальки учатся раньше, чем думать...
    увы хамством на хамство, не чего личного
    Написано
  • Как составить сложный агрегированный запрос?

    @holllop Автор вопроса
    Adamos,
    что вы себе фантазируете, БД не предполагает, приземлитесь уже.
    Братик квадратик ты чем читал ?
    если вдруг не понятно из контекста, то агрегацией я занимаюсь впервые
    ,
    И банально даже не знаю можно ли так сделать
    . Вот вопрос может ли быть в одной строке реализовано вывод столбцов o.order_id, w.id_work, e.n_plan. При этом получая три записи, а не пять как у меня, так как уникальных order_id 3?
    Написано
  • Как составить сложный агрегированный запрос?

    @holllop Автор вопроса
    Adamos, в каком смысле ? если вдруг не понятно из контекста, то агрегацией я занимаюсь впервые. И поэтому ваши "ловкие" подстёбы проходят мимо меня. Я просто хочу получить запись где один order_id из таблицы order соответствует нескольким записям id_work из таблицы works, каждая из которых может соответствовать нескольким n_works из таблицы expenses. И банально даже не знаю можно ли так сделать. Получая таким образом многовложенность или хз как это называется.
    Написано
  • Как составить сложный агрегированный запрос?

    @holllop Автор вопроса
    Adamos, я бы даже сказал, что эти два поля мне важнее
    Написано
  • Как составить сложный агрегированный запрос?

    @holllop Автор вопроса
    IvanU7n, вы имеете в виду GROUP BY w.id_order, w.id_work, w.name_object; эту часть команды ? если я уберу остальные параметры и оставлю GROUP BY w.id_order;, то получаю ошибку
    столбец "w.id_work" должен фигурировать в предложении GROUP BY или использоваться в агрегатной функции
    Написано
  • Как обработать массив переменной длины?

    @holllop Автор вопроса
    IvanU7n, да уже увидел свою оплошность.
    function accepting_expenses_array(req, res) {
      const expenses_array = req.body;
      const expenses_as_numbers = expenses_array.map(Number);
      
      // Определяем MAX(id_work) из таблицы "works"
      pool.query('SELECT MAX(id_work) FROM "works"', (error, maxResult) => {
        if (error) {
          throw error;
        }
        const maxIdWork = maxResult.rows[0].max;
    
        // Формируем INSERT-запрос и значения для вставки
        let insertQuery = 'INSERT INTO "expenses" (n_plan, type_work_id, printer_id, material_id, performer_id, format_id, n_sheets, n_page, n_ruined) VALUES ';
        let values = [];
        
        for (let i = 0; i < expenses_as_numbers.length; i += 8) {
          if (i !== 0) {
            insertQuery += ', ';
          }
          insertQuery += `($${i * 8 + 1}, $${i * 8 + 2}, $${i * 8 + 3}, $${i * 8 + 4}, $${i * 8 + 5}, $${i * 8 + 6}, $${i * 8 + 7}, $${i * 8 + 8})`;
          // Формируем значения для вставки
          values.push(maxIdWork, ...expenses_as_numbers.slice(i, i + 8));
        }
        
        console.log(values);
        console.log(insertQuery);
      });
    }

    так работает но вывод меня не радует. Вообще не то, что я хотел
  • Как обработать массив переменной длины?

    @holllop Автор вопроса
    IvanU7n, за вдохновение спасибо
    function accepting_expenses_array(req, res) {
      const expenses_array = req.body;
      const expenses_as_numbers = expenses_array.map(Number);
      
      // Определяем MAX(id_work) из таблицы "works"
      pool.query('SELECT MAX(id_work) FROM "works"', (error, maxResult) => {
        if (error) {
          throw error;
        }
        const maxIdWork = maxResult.rows[0].max;
    
        // Формируем INSERT-запрос и значения для вставки
        let insertQuery = 'INSERT INTO "expenses" (n_plan, type_work_id, printer_id, material_id, performer_id, format_id, n_sheets, n_page, n_ruined) VALUES ';
        let values = [];
        
        for (let i = 0; i < expenses_as_numbers.length; i += 8) {
          if (i !== 0) {
            insertQuery += ', ';
          }
          insertQuery += '($${i * 8 + 1}, $${i * 8 + 2}, $${i * 8 + 3}, $${i * 8 + 4}, $${i * 8 + 5}, $${i * 8 + 6}, $${i * 8 + 7}, $${i * 8 + 8})';
          // Формируем значения для вставки
          values.push(maxIdWork, ...expenses_as_numbers.slice(i, i + 8));
        }
        
        console.log(values);
        
        // Выполняем запрос
        pool.query(insertQuery, values, (insertError, insertResult) => {
          if (insertError) {
            throw insertError;
          }
          res.status(200).json(insertResult.rows);
        });
      });
    }

    придумал, только вот ошибка
    ошибка синтаксиса (примерное положение: "{")
    говорит что я может и молодец, но что-то где-то пропустил
  • Не приходит в голову алгоритм лучше. Как сделать лучше?

    @holllop Автор вопроса
    и почему я тупил ? и сам не додумался
  • Как сделать поиск по таблице?

    @holllop Автор вопроса
    да мне для обучения хочу научиться взаимодействию бэка(написанного собой и фронта написанного собой). Но ссылки считаю полезными
  • Как обеспечить возможность одновременного вызова эндпойнта, пишущего в БД?

    @holllop
    Алексей Николаев, отлично я не много сомневался, что вам могут помочь эти инструменты. Даже переживал не зря ли их упомянул.
  • Как сделать поиск по таблице?

    @holllop Автор вопроса
    спасибо, восприниму это положительно
    Вам нужно написать немного кода.
    . Я просто думал нужно как-то базу ковырять или бэк.