【问题标题】:How to use multidimensional array in mysql query with php?如何使用 php 在 mysql 查询中使用多维数组?
【发布时间】:2018-07-31 06:27:23
【问题描述】:

我在 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"}

我希望将数据格式化为这样,但在我的情况下,它会为每个操作显示不同的行。

【问题讨论】:

    标签: php mysql json codeigniter multidimensional-array


    【解决方案1】:

    数组推送只是将元素添加到数组的末尾。这不是你想要的。你想基本上复合相同年份和月份的元素。为此,我们可以将其指定为第一个子数组键,并将数组值附加到 orgaction

        $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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-30
      • 2011-08-02
      • 2017-12-11
      • 2020-05-01
      • 2011-10-23
      • 2016-03-04
      • 2013-09-02
      • 1970-01-01
      相关资源
      最近更新 更多