загрузка страницы долгое время из-за запроса соединения внутри цикла for - PullRequest
0 голосов
/ 24 июня 2019

Я создал функцию для отображения записей на странице, используя приведенный ниже код, но загрузка страницы занимает много времени из-за запроса на присоединение. Может кто-нибудь найти проблему и предоставить решение для этого?

public function baleList($program_id) {
        $this->db->select('id');
        $this->db->from(GIN_PROCESS);
        $this->db->where('ginner_id', $this->prscr_id);
        $this->db->where('program', $program_id);
        $this->db->order_by('id', 'DESC');
        $result = $this->db->get()->result_array(); 
        $id_array = array_column($result, 'id');
        $bales_list = array(); 
        foreach ($id_array as $id) {
            $this->db->select('gp.id, gp.lot_no, SUM(gb.weight) AS weight, SUM(gb.staple) AS staple, SUM(gb.mic) AS mic, SUM(gb.strength) AS strength, SUM(gb.trash) AS trash, gb.color_grade');
            $this->db->from(GIN_BALES . ' gb');
            $this->db->join(GIN_PROCESS . ' gp', 'gp.id=gb.process_id');
            $this->db->where('gb.process_id', $id);
            $this->db->where('gb.sold_status', 0);
            $lot_details = $this->db->get()->result(); 

            if (count($lot_details) > 0) {
                $this->db->select('*');
                $this->db->from(GIN_BALES);
                $this->db->where('sold_status', 0);
                $this->db->where('process_id', $id);
                $bales = $this->db->get()->result();
                if (count($bales) > 0) {
                    $lot_details[0]->bales = $bales;
                    $bales_list[] = $lot_details[0];
                }
            }
        }
        return $bales_list;
    }

Есть ли отдельная функция для этих внутренних запросов?

ginprocess

ginbale

1 Ответ

0 голосов
/ 25 июня 2019

Ну, выполнение запроса n раз наверняка снижает производительность. Попробуйте добавить «GROUP BY gb.process_id», удалить сам цикл и использовать «WHERE gb.process_id IN ($ id_array)». Возможно, вам придется использовать «ANY_VALUE ()» в пределах вашего выбора, чтобы выбрать столбцы без мин / макс / и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...