У меня есть таблица mysql, как показано ниже:
t_id project_id task_id start_date
---------------------------------------
1 29 1 2020-03-09
2 29 2 2020-02-09
3 1 3 2019-02-20
4 1 4 2019-12-09
5 1 5 2019-12-09
Я хочу показать данные из приведенной выше таблицы так, чтобы все task_id
отображались в виде значений, разделенных запятыми, для конкретная дата для конкретного проекта. Допустим, для project_id=1
сначала я перечисляю все даты в start_date
, затем я покажу, что задачи с таким же start_date
будут перечислены как разделенные запятыми.
Ожидаемый результат:
start_date task_id
-----------------------
2019-02-20 3
2019-12-09 4,5
Я пытался добиться того же с 2 циклами foreach, но я не получаю ожидаемых результатов. Ниже приведен мой код:
Контроллер:
$id = $this->uri->segment(4);
$dates = $this->Timesheet_model->get_tasks_dates($id); //get the dates
foreach($dates as $d)
{
$rows = $this->Timesheet_model->get_project_tasks_by_date($id,$d->start_date); //get tasks for each date
foreach($rows->result() as $res)
{
$t[] = $res->task_id;
}
$ts = implode(",",$t);
$tasks = array(
'date'=>$d->start_date,
'tasks'=>$ts
);
}
print_r($tasks);
Модель
public function get_tasks_dates($id)
{
$sql = 'SELECT DISTINCT (start_date) FROM xin_tasks WHERE project_id = ? ORDER BY start_date DESC ';
$binds = array($id);
$query = $this->db->query($sql, $binds);
return $query->result();
}
public function get_project_tasks_by_date($id,$d)
{
$sql = 'SELECT task_id FROM xin_tasks WHERE project_id = ? AND start_date = ?';
$binds = array($id,$d);
$query = $this->db->query($sql, $binds);
return $query;
}
Когда я пытаюсь print_r($tasks)
, получается Array ( [date] => 2019-02-20 [tasks] => 4,5,3 )
.
Я знаю, что это не сложная проблема, но в настоящее время я не могу найти правильное решение для достижения этой цели. Есть ли другой эффективный способ решить эту проблему?