Php 选择日期在where条件下的记录,并根据每个日期对结果进行分组

Php 选择日期在where条件下的记录,并根据每个日期对结果进行分组,php,mysql,select,foreach,Php,Mysql,Select,Foreach,我有一个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-

我有一个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\u id
必须显示为特定项目特定日期的逗号分隔值。假设对于
project\u id=1
我首先列出了
start\u date
中的所有日期,然后我将显示具有相同
start\u 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);
模型

当我尝试打印($tasks)时,结果是数组([date]=>2019-02-20[tasks]=>4,5,3)

我知道这不是一个复杂的问题,但目前我无法找到合适的解决方案来实现这一点。有没有其他有效的方法来解决这个问题

SELECT start_date,GROUP_CONCAT(task_id) as task_id
from project
where project_id = 1
group by start_date

您的问题可以通过使用这个查询来解决

如果同一天重复相同的
task\u id
,则使用
DISTINCT
关键字

SELECT start_date,GROUP_CONCAT(DISTINCT task_id) as task_id
FROM project
WHERE project_id = 1
GROUP BY start_date;
如果您使用
DISTINCT
,我们将获得唯一的任务id

SELECT start_date,GROUP_CONCAT(DISTINCT task_id) as task_id
FROM project
WHERE project_id = 1
GROUP BY start_date;