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 關注
- 157 瀏覽
添加回答
舉報