Как использовать многомерный массив в запросе MySQL с PHP?

0

Я использую три таблицы и один запрос в mysql, чтобы получить определенного пользователя.

Я получаю именно то, что хочу от запроса, но он не отформатирован правильно.

Мой запрос:

 public function get_all_payslips()
                {
                    $empid = $this->session->userdata('EMPLOYEE_ID');
                    $orgid = $this->session->userdata('CURRENT_ORG_ID');                    
                    $where = "EMPLOYEE_ID ='".$empid."' ";
                    $response = array();
                    $queryString = "SELECT
                                    em.EMPLOYEE_ID,
                                    em.EMPLOYEE_NAME
                                    FROM                                   
                                    uk_new_salary_slip assd,
                                    employee_master em
                                    WHERE
                                    em.".$where."
                                    GROUP BY em.EMPLOYEE_ID
                                    order by em.EMPLOYEE_NAME asc";                            
                    $query = $this->db->query($queryString);

                    foreach ($query->result() as $data) 
                    {         
                        $result = array();
                        $result['EMPLOYEE_NAME'] = $data-> EMPLOYEE_NAME;
                        $queryString = "SELECT
                                    mo.months,
                                    MONTH((assd.pay_period)) as monthss,
                                    YEAR((assd.pay_period)) as PAY_YEAR,
                                    GROUP_CONCAT(DISTINCT(assd.id)) as action,
                                    GROUP_CONCAT(DISTINCT(assd.ORG_ID)) as org
                                    FROM                         
                                    uk_new_salary_slip assd,
                                    employee_master em,                               
                                    months mo
                                    WHERE
                                    assd.emp_id =  ". $data->EMPLOYEE_ID ."
                                      AND mo.id =  MONTH((assd.pay_period))
                                      GROUP BY monthss,PAY_YEAR
                                      order by PAY_YEAR desc";
                        $queryString1 = "SELECT
                                    mo.months,
                                    MONTH((germany.pay_from)) as monthss,
                                    YEAR((germany.pay_from)) as PAY_YEAR,
                                    GROUP_CONCAT(DISTINCT(germany.id)) as action,
                                    GROUP_CONCAT(DISTINCT(germany.ORG_ID)) as org
                                    FROM                         
                                    new_germany_salary_slip germany,
                                    employee_master em,                               
                                    months mo
                                    WHERE
                                    germany.emp_id =  ". $data->EMPLOYEE_ID ."
                                      AND mo.id =  MONTH((germany.pay_from))
                                      GROUP BY monthss,PAY_YEAR
                                      order by PAY_YEAR desc";
                        $queryString2 = "SELECT
                                    mo.months,
                                    MONTH((poland.pay_from)) as monthss,
                                    YEAR((poland.pay_from)) as PAY_YEAR,
                                    GROUP_CONCAT(DISTINCT(poland.id)) as action,
                                    GROUP_CONCAT(DISTINCT(poland.ORG_ID)) as org
                                    FROM                         
                                    new_poland_salary_slip poland,
                                    employee_master em,                               
                                    months mo
                                    WHERE
                                    poland.emp_id =  ". $data->EMPLOYEE_ID ."
                                      AND mo.id =  MONTH((poland.pay_from))
                                      GROUP BY monthss,PAY_YEAR
                                      order by PAY_YEAR desc";

                        $query1 = $this->db->query($queryString);                       
                        $query2 = $this->db->query($queryString1);
                        $query3 = $this->db->query($queryString2);                  


                        $children = array();
                        foreach ($query1->result() as $data1)
                            {
                                $yearArray = array();                          
                                $yearArray['month'] = $data1->months;
                                $yearArray['year'] = $data1->PAY_YEAR;
                                $yearArray['org'] = $data1->org;                            
                                $yearArray['action'] = $data1->action;
                                array_push($children, $yearArray);
                            }
                        foreach ($query2->result() as $data2)
                            {
                                $yearArray = array();                          
                                $yearArray['month'] = $data2->months;
                                $yearArray['year'] = $data2->PAY_YEAR;
                                $yearArray['org'] = $data2->org;                            
                                $yearArray['action'] = $data2->action;
                                array_push($children, $yearArray);
                            }
                        foreach ($query3->result() as $data3)
                            {
                                $yearArray = array();                          
                                $yearArray['month'] = $data3->months;
                                $yearArray['year'] = $data3->PAY_YEAR;
                                $yearArray['org'] = $data3->org;                            
                                $yearArray['action'] = $data3->action;
                                array_push($children, $yearArray);
                            }
                            $result['children'] = $children;
                            array_push($response, $result);

                    }                   
                    return $response;                   
                }

Если в month массиве year такое же тогда IN action значение должно быть 4,2. Если вы видите в объекте 0-го и 4-го месяца и год то же самое, поэтому оба значения action объекта должны быть в одной строке, и аналогично его значение org должно быть org:40,47 соответственно.

{month:"FEBRUARY", year:"2018",org:"40,47",action:"4,2"}

Я хочу, чтобы данные были отформатированы таким образом, но в моем случае они показывают разные строки для каждого действия.

Изображение 174551

Теги:
multidimensional-array
codeigniter

1 ответ

0

Вытеснение массива просто добавляет элементы в конец массива. Это не то, что вы хотите. Вы хотите существенно объединить элементы того же года и месяца. Чтобы сделать это, мы можем назначить это как 1-й ключ вспомогательного массива и просто добавить значения массива в org и action:

    $output = array();
    foreach ($query1->result() as $data1) {
        $key = $data1->PAY_YEAR . $data1->months;
        if (!isset($output[$key]['month'])) {
            $output[$key]['month'] = $data1->months;
            $output[$key]['year'] = $data1->PAY_YEAR;
        }
        $output[$key]['org'][] = $data1->org;
        $output[$key]['action'][] = $data1->action;
    }
    foreach ($query2->result() as $data2) {
        $key = $data2->PAY_YEAR . $data2->months;
        if (!isset($output[$key]['month'])) {
            $output[$key]['month'] = $data2->months;
            $output[$key]['year'] = $data2->PAY_YEAR;
        }
        $output[$key]['org'][] = $data2->org;
        $output[$key]['action'][] = $data2->action;
    }
    foreach ($query3->result() as $data3) {
        $key = $data3->PAY_YEAR . $data3->months;
        if (!isset($output[$key]['month'])) {
            $output[$key]['month'] = $data3->months;
            $output[$key]['year'] = $data3->PAY_YEAR;
        }
        $output[$key]['org'][] = $data3->org;
        $output[$key]['action'][] = $data3->action;
    }
    echo '<pre>';
    print_r(array_keys($output));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню