PHP / MYSQL查询将被另一个数组分组

问题描述 投票:0回答:2

我今天的需求,希望您能找到很好的解决方案,以下是。我有一个包含任务的数据库表,每个任务的状态为“打开”或“关闭”。就我而言,我只有具有未完成任务的记录。

我需要建立一个显示所有状态选项(打开,关闭)的数组,并在每个选项内部显示打开或关闭的任务(如果存在)。输出应为:

Array (
  [open] => Attay(task1), Array(task2),..
  [closed] => Array()  
)

如果我进行sql查询:

select task_id,status from tasks group by status

我只在“打开”中获得任务。哪种方法是构建状态数组并将每个具有该状态的任务“追加”到其中的最佳方法?

提前感谢!

php mysql arrays group-by
2个回答
0
投票

您可以使用GROUP_CONCAT将每个状态的所有任务收集到一个用逗号分隔的列表中,然后将explode收集到PHP中的一个数组中。假设您正在使用mysqli,并且您的连接在$conn中,则应执行以下操作:

$sql = "SELECT status, GROUP_CONCAT(task_id) AS taskids FROM tasks GROUP BY status";
$result = $conn->query($sql);
$output = array();
while ($row = $result->fetch_assoc()) {
    $output[$row['status']] = explode(',', $row['taskids']);
}

0
投票

在纯SQL中,您可以使用union all生成状态的派生表,然后使用left join生成原始表:

select
    s.status,
    json_arrayagg(t.task_id) json_task_ids
from (
    select 'open' status
    union all select 'closed' status
) s
left join tasks t on t.status = s.status
group by s.status
© www.soinside.com 2019 - 2024. All rights reserved.