亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP/MYSQL 查詢被另一個數組分組

PHP/MYSQL 查詢被另一個數組分組

PHP
梵蒂岡之花 2023-04-21 10:01:48
我今天的需要,我希望你能找到很好的解決方案,如下所示。我有一個包含任務的數據庫表,每個任務的狀態為“打開”或“關閉”。就我而言,我只有帶有未完成任務的記錄。我需要構建一個數組,顯示所有狀態選項(打開、關閉),并在每個狀態選項中顯示打開或關閉的任務(如果存在)。輸出應該是:Array (  [open] => Attay(task1), Array(task2),..  [closed] => Array()  )如果我進行 sql 查詢:select task_id,status from tasks group by status我只得到“打開”中的任務。哪個是構建狀態數組并在每個任務中“附加”具有該狀態的任務的最佳方法?提前致謝!
查看完整描述

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);


查看完整回答
反對 回復 2023-04-21
?
弒天下

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']);

}


查看完整回答
反對 回復 2023-04-21
?
PIPIONE

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);


查看完整回答
反對 回復 2023-04-21
?
德瑪西亞99

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


查看完整回答
反對 回復 2023-04-21
  • 4 回答
  • 0 關注
  • 157 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號