Я использую три таблицы и один запрос в 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"}
Я хочу, чтобы данные были отформатированы таким образом, но в моем случае они показывают разные строки для каждого действия.
Вытеснение массива просто добавляет элементы в конец массива. Это не то, что вы хотите. Вы хотите существенно объединить элементы того же года и месяца. Чтобы сделать это, мы можем назначить это как 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));