2017-05-31 76 views
1

我需要編寫一個mysql查詢,它將從Task表中選擇父數據,在子SubTask表上執行左連接並將子數據追加到Task數組下的數組像這樣......MySQL選擇連接表作爲結果數組

任務

id| details  | created 
=============================== 
1 | This is.... | 2017-08-19 
2 | This is.... | 2017-08-20 
3 | This is.... | 2017-08-21 

子課題負責人

id | task_id | details  | created 
============================================ 
123 | 1  | This is.... | 2017-08-19 
234 | 1  | This is.... | 2017-08-20 
345 | 2  | This is.... | 2017-08-21 
456 | 2  | This is.... | 2017-08-21 
567 | 3  | This is.... | 2017-08-21 


[ 
     [ 
      'id'=>1, 
      'details'=>'This is from the task table', 
      'subTasks'=>[ 
       [ 
        'id'=>123, 
        'details'=>'This is from the sub task table', 
       ], 
       [ 
        'id'=>234, 
        'details'=>'This is from the sub task table', 
       ] 
      ] 
     ], 
     [ 
      'id'=>2, 
      'details'=>'This is from the task table', 
      'subTasks'=>[ 
       [ 
        'id'=>345, 
        'details'=>'This is from the sub task table', 
       ], 
       [ 
        'id'=>456, 
        'details'=>'This is from the sub task table', 
       ] 
      ] 
     ] 
     [ 
      'id'=>3, 
      'details'=>'This is from the task table', 
      'subTasks'=>[ 
       [ 
        'id'=>567, 
        'details'=>'This is from the sub task table', 
       ] 
      ] 
     ] 
    ] 

這裏是我的查詢:

$sql = " SELECT t.*, 
         (select st.* from SubTask) as SubTasks 
      FROM  Task t 
      LEFT JOIN SubTask st 
       ON  st.task_id = t.id 
      "; 

我知道這個查詢是不正確的,我只是不知道如何寫它,否則。

+0

顯示您的餐桌結構 –

+0

這是非常困難的幫助您沒有顯示您的表與一些信息。 – jjoselon

+0

添加了最基本的表詳細信息 – LargeTuna

回答

2

你並不需要一個子查詢select,只是:

SELECT t.id AS task_id, t.details AS task_details, st.id AS subtask_id, st.details AS subtask_details 
FROM Task t 
LEFT JOIN SubTask st ON st.task_id = t.id 

然後你的PHP代碼可以收集所有的子任務信息到一個數組。

$tasks = []; 
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $task_id = $row['task_id']; 
    if (!isset($tasks[$task_id])) { 
     $tasks[$task_id] = ['id' => $task_id, 'details' => $row['task_details'], 'subtasks' => []]; 
    } 
    if ($row['subtask_id'] !== null) { 
     $tasks[$task_id]['subtasks'][] = ['id' => $row['subtask_id'], 'details' => $row['subtask_details']]; 
    } 
} 
+0

這很好,謝謝! – LargeTuna