【发布时间】: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