4 回答
TA贡献1820条经验 获得超10个赞
你可以尝试这样的事情
$sql = "SELECT task_id, status FROM tasks";
$status['open'], status['close'] = [];
while( $row = $result->fetch_assoc() ) {
if ($row['status'] == 'open') {
array_push($status['open'], $row['task_id']);
}
if ($row['status'] == 'close') {
array_push($status['close'], $row['task_id']);
}
}
print_r($status);
TA贡献1818条经验 获得超8个赞
您可以使用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']);
}
TA贡献1829条经验 获得超9个赞
这样解决的。
$statusArray = ['opened', 'wait_others', 'wait_us', 'closed'];
foreach ($statusArray as $status) {
$ticketsArray[$status]= array();
}
foreach ($row as $key => $value) {
$ticketsArray[$value->status_title][$value->ticket_id]= $row[$key];
}
print"<pre>";print_r($ticketsArray);
TA贡献1770条经验 获得超3个赞
在纯 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
MySQL 没有array数据类型,因此这会将任务 ID 列表作为 json 数组。另一种选择是构建逗号分隔列表:为此,您可以使用group_concat():
select
s.status,
group_concat(t.task_id) csv_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
- 4 回答
- 0 关注
- 122 浏览
添加回答
举报